我正在学习如何正确使用指针和“智能指针”来防止内存泄漏。这是我正在分析的伪代码片段。
[ClassA和ClassB继承BaseClass; ExtClass只是一些外部类(与BaseClass不相关)
main(){
ExtClass *extPtr = new ExtClass();
BaseClass *ptr = new ClassA();
extPtr->setPtr(ptr);
extPtr->fun();
...
if(change_object()) {
delete ptr;
ptr = new ClassB();
extPtr->setPtr(ptr);
extPtr->fun();
}
}
-------------------------------------
ExtClass {
private:
BaseClass *m_ptr;
public:
~ExtClass() { delete m_ptr; }
void ExtClass::fun(){
m_ptr->do_some_stuff();
}
void ExtClass::setPtr(BaseClass *ptr){
m_ptr = ptr;
}
}
问题:
上面的例子正确吗?我的意思是不会有任何泄漏,对吗?
是否有可能以某种方式将常规指针保留在ExtClass中,并用unique_ptr替换'BaseClass * ptr'?或者也许应该是shared_pointer?
最佳答案
好的,对于基类,如果退出函数,extPtr
将被泄漏。
要与另一个交换智能指针,我相信这就是您想要的:http://en.cppreference.com/w/cpp/memory/unique_ptr/swap
顺便说一句,我在您的代码中根本看不到任何智能指针。