转换为无效*

时间:2011-06-30 11:47:22

标签: c++ pointers casting void

如何将我自己的类的任何对象转换为指向void的指针?

MyClass obj;
(void*)obj; // Fail

5 个答案:

答案 0 :(得分:11)

MyClass obj;
void *p;

p = (void*)&obj; // Explicit cast.
// or:
p = &obj; // Implicit cast, as every pointer is compatible with void *

但要注意! obj以这种方式分配在堆栈上,只要你离开函数,指针就会变为无效。

编辑:已更新以显示在这种情况下,因为每个指针都与void指针兼容,所以不需要显式强制转换。

答案 1 :(得分:5)

如果您使用该地址,则可以将其转换为void指针。

MyClass obj;
void *ptr = (void*)&obj; // Success!

答案 2 :(得分:5)

您无法将非指针转换为void*。您需要将指向对象的指针转换为void*

(void*)(&obj); //no need to cast explicitly.

转换是隐含的

void* p = &obj; //OK

答案 3 :(得分:1)

要做一些有意义的事情,首先你必须获取一个对象的地址,获得一个指针值;然后施放指针。

MyClass obj;
MyClass * pObj = &obj;
void * pVoidObj = (void*)pObj;

答案 4 :(得分:1)

我相信你只能将指向对象的指针转换成指向void ???的指针

也许:(void*)(&obj)