我有这个问题:
void myFunc()
{
MyClass * myInstance = NULL;
newInstance(myInstance);
}
void newInstance(MyClass * instance)
{
instance = new MyClass(...);
}
代码似乎工作正常,但是当我从 newInstance 函数退出时,我的 myInstance 为空,而不是 newInstance 内部的值......问题出在哪里?t
谢谢
指针被复制到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(...));
}
您需要将引用传递给指针,或从函数返回指针:
void newInstance(MyClass*& instance)
{
instance = new MyClass(...);
}
MyClass* newInstance()
{
return new MyClass(...);
}
但是您不想处理指向动态分配内存的原始指针。您真正需要的是在这里使用智能指针,尤其是std::unique_ptr。