我正在学习如何正确使用指针和“智能指针”来防止内存泄漏。这是我正在分析的伪代码片段。
[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

顺便说一句,我在您的代码中根本看不到任何智能指针。

10-07 14:24