1

我有这个问题:

void myFunc()
{
  MyClass * myInstance = NULL;

  newInstance(myInstance);
}

void newInstance(MyClass * instance)
{
  instance = new MyClass(...);
}

代码似乎工作正常,但是当我从 newInstance 函数退出时,我的 myInstance 为空,而不是 newInstance 内部的值......问题出在哪里?t

谢谢

4

2 回答 2

9

指针被复制到newInstance,然后您更改该副本的值。如果要修改函数内部的指针,需要通过引用传递:

void newInstance(MyClass*& instance)
{
  instance = new MyClass(...);
}

或者,您可以通过 aMyClass**和 do *instance = new Class(...);

无论哪种方式,最好实际返回指针而不是将其作为可修改的参数传递。

void myFunc()
{
  MyClass * myInstance = newInstance();
  delete myInstance;
}

MyClass* newInstance()
{
  return new MyClass(...);
}

当然,你必须记住delete对象。为避免这种情况,您可以使用智能指针使其更安全:

void myFunc()
{
  auto myInstance = newInstance();
}

std::unique_ptr<MyClass> newInstance()
{
  return std::unique_ptr<MyClass>(new MyClass(...));
}
于 2012-12-18T15:18:15.307 回答
2

您需要将引用传递给指针,或从函数返回指针:

void newInstance(MyClass*& instance)
{
  instance = new MyClass(...);
}

MyClass* newInstance()
{
  return new MyClass(...);
}

但是您不想处理指向动态分配内存的原始指针。您真正需要的是在这里使用智能指针,尤其是std::unique_ptr

于 2012-12-18T15:19:52.987 回答