我有这个问题:
void myFunc()
{
MyClass * myInstance = NULL;
newInstance(myInstance);
}
void newInstance(MyClass * instance)
{
instance = new MyClass(...);
}
代码似乎工作正常,但是当我退出newInstance函数时,myInstance为null,而不是newInstance中的值...问题在哪里?t
感谢
答案 0 :(得分:9)
将指针复制到newInstance
,然后更改该副本的值。如果要修改函数内部的指针,则需要通过引用传递它:
void newInstance(MyClass*& instance)
{
instance = new MyClass(...);
}
或者,您可以传递MyClass**
并执行*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(...));
}
答案 1 :(得分:2)
您需要将一个refetence传递给指针,或者从函数返回指针:
void newInstance(MyClass*& instance)
{
instance = new MyClass(...);
}
MyClass* newInstance()
{
return new MyClass(...);
}
但是你不想处理动态分配内存的原始指针。你真正需要的是在这里使用smart pointers,尤其是std::unique_ptr。