shared_ptr与虚析构
1 | class A { |
以下不会存在内存泄漏的写法是?
A. AX* p = new AX(); delete p;
B. A* p = new AX(); delete p;
C. shared_ptr<A> p = shared_ptr<A>(make_shared<AX>()); delete p;
D. shared_ptr<A> p = shared_ptr<A>(make_shared<A>()); delete p;
正确答案: A,C,D
解析:
B:基类析构函数没有声明为
virtual
,所以 p 所指的对象析构时,不会调用基类的析构函数。D:正常情况,显然不会内存泄漏。
C:shared_ptr创建时会记住原来的类型的析构函数,基类指针析构时仍会调用派生类的析构函数。
shared_ptr 创建时即捕获析构动作,何解?
本人也不懂。。。待笔者读完《STL源码剖析》后再回来解释。
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 极简!
评论