c ++函数中的新实例

ghi*_*boz 1 c++ pointers class instance

我有这个问题:

void myFunc()
{
  MyClass * myInstance = NULL;

  newInstance(myInstance);
}

void newInstance(MyClass * instance)
{
  instance = new MyClass(...);
}
Run Code Online (Sandbox Code Playgroud)

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

谢谢

Jos*_*eld 9

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

void newInstance(MyClass*& instance)
{
  instance = new MyClass(...);
}
Run Code Online (Sandbox Code Playgroud)

或者,你可以通过MyClass**和做*instance = new Class(...);.

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

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

MyClass* newInstance()
{
  return new MyClass(...);
}
Run Code Online (Sandbox Code Playgroud)

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

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

std::unique_ptr<MyClass> newInstance()
{
  return std::unique_ptr<MyClass>(new MyClass(...));
}
Run Code Online (Sandbox Code Playgroud)

  • @ghiboz在这种情况下,功能做得太多了.您还可以返回带有多个指针的`struct`. (2认同)