首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >C++ -指针和“智能指针”

C++ -指针和“智能指针”
EN

Stack Overflow用户
提问于 2014-04-05 11:38:40
回答 1查看 110关注 0票数 1

我正在学习如何使用正确的指针和“智能指针”来防止内存泄漏。这是我正在分析的伪代码片段。ClassA和ClassB继承BaseClass;ExtClass只是一些外部类(与BaseClass无关)

代码语言:javascript
复制
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;
    }
}

问题:

  1. 上面的例子正确吗?我是说不会有任何泄漏,对吧?
  2. 是否有可能在ExtClass中保留普通指针,并将'BaseClass *ptr‘替换为unique_ptr?或者应该是shared_pointer?
EN

回答 1

Stack Overflow用户

发布于 2014-04-05 11:42:18

好的,对于基类,如果退出函数,extPtr将被泄露。

要与另一个智能指针交换,我相信这就是您想要的:ptr/swap

顺便说一句,我在你的代码里没有看到任何聪明的实习生。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/22880396

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档