2012-12-18 38 views
1

新實例,我有這樣的問題:C++函數

void myFunc() 
{ 
    MyClass * myInstance = NULL; 

    newInstance(myInstance); 
} 

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

的代碼看起來工作正常,但是當從的newInstance功能我退出,我將myInstance爲空,不與有內部的newInstance值.. 。問題出在哪裏?噸

感謝

回答

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(...)); 
} 
+3

或指向指針的指針。 – Linuxios

+0

甚至更​​好讓newInstance返回指針。只是要小心內存泄漏 – doron

+0

謝謝,我不能回來,因爲我有不止一個參數,如'實例' – ghiboz

1

您將需要一個refetence傳遞給一個指針,或從函數返回指針:

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

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

但你不不想處理動態分配內存的原始指針。你真正需要的是在這裏使用smart pointers,特別是std::unique_ptr