【发布时间】:2017-08-06 16:19:57
【问题描述】:
所以我在阅读Handle in C 上的文章并意识到我们将句柄实现为 void 指针,因此我们获得的“任何”对象/数据类型都可以将 void 指针转换为那种对象/数据并获取它的值。所以我基本上有两个担忧:
1.如果让我们说下面的例子取自Handle in C
typedef void* HANDLE;
int doSomething(HANDLE s, int a, int b) {
Something* something = reinterpret_cast<Something*>(s);
return something->doit(a, b);
}
如果我们将值传递给函数dosomething(21,2,2),这是否意味着HANDLE指向的值是21,如果是的话,当我们键入任何对象时如何将其转换为该对象,它是否能够使用它,例如在这个例子中,换句话说,指向对象Something的指针something将存储值21。
2.Secondly 链接还说“所以在你的代码中你只是传递 HANDLE 作为一个不透明的值”它实际上是什么意思?为什么我们要“传递句柄”?如果有人可以给出更令人信服的使用对象的句柄示例,那就太好了!
【问题讨论】:
-
这是否意味着 HANDLE 指向的值是 21 不,这意味着
s是 21。我怀疑那个内存地址有什么有趣的东西。 -
我可能错了,但在代码中,您将 s 转换为另一种类型。实际地址永远不会改变
标签: c++ handle void-pointers