C++ C++;-指针和';智能指针&x27;
我正在学习如何正确使用指针和“智能指针”来防止内存泄漏。这是我正在分析的一段伪代码。 [ClassA和ClassB继承基类;ExtClass只是一些外部类(与基类无关)C++ C++;-指针和';智能指针&x27;,c++,pointers,smart-pointers,C++,Pointers,Smart Pointers,我正在学习如何正确使用指针和“智能指针”来防止内存泄漏。这是我正在分析的一段伪代码。 [ClassA和ClassB继承基类;ExtClass只是一些外部类(与基类无关) main(){ ExtClass *extPtr = new ExtClass(); BaseClass *ptr = new ClassA(); extPtr->setPtr(ptr); extPtr->fun(); ... if(change_object()
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;
}
}
问题:
对于基类,如果退出函数,
extPtr
将泄漏
要将一个智能指针与另一个智能指针交换,我相信这就是您想要的:
顺便说一句,我在你的代码中根本看不到任何智能点。代码一点也不智能。我建议你看看
valgrind
。这是一套很棒的软件,你可以在代码上运行。它将为你分析它,并查找内存泄漏等。我知道你在这里这么做是为了了解基本原理,而不是当你的代码变得更复杂时,你留下内存泄漏的可能性很大;因此,学习使用这些工具是你“无泄漏C代码”之旅的一个重要部分。谢谢各位!我知道这一点都不聪明,我只是在学习如何改进;)看一看也许你应该读一本关于自动存储持续时间和RAII的书