指向动态分配的类的void指针

void pointer to a dynamically allocated class

本文关键字:void 指针 动态分配      更新时间:2023-10-16

我试图将一个void*传递给一个函数,然后在该函数内使指针指向一个动态创建的对象。这就是我目前所拥有的,但似乎不起作用:

main:

int main()
{
  void* objPtr;
  setPtr(objPtr);
}

setPtr:

void setPtr(void*& objPtr)
{
  objPtr = new Obj1; 
  (*objPtr).member1 = 10; //error: expression must have pointer-to-class type
}

目标1:

struct Obj1
{
  int member1;
};

提前感谢

当然:void*不指向类类型,因此不能用于访问成员。C++是静态类型的。编译器看到一个void*,仅此而已。它不会试图弄清楚指针实际指向的是什么类型的对象——你必须通过强制转换来告诉它:

objPtr->whatever; // fails: objPtr is not a pointer-to-class-type
((actual_type*)objPtr)->whatever; // okay: cast to actual_type*

好吧,这就是我的C程序员。有些人更喜欢在这里使用static_cast

static_cast<actual_type*>(objPtr)->whatever; // okay: cast to actual_type*

但是,无论您执行何种操作,都必须确保objPtr实际上指向actual_type类型的对象。

EDIT:问题所有者的问题是不同的,这个答案代表用指针对指针实现的相同的东西。请咨询Pete Becker关于正确选角的真实答案。

int main()
{
  void* objPtr;
  setPtr(&objPtr);
}

setPtr:

void setPtr(void** objPtr)
{
  *objPtr = new Obj1; //where Obj1 is user defined class type
}

我在这里所做的只是C向指针传递,setPtr函数将一个指向void指针的指针设置为所需的值。