class A {
public:
  A();
  ~A();
private:
  Data* data;
};

class AX : public A {
public:
   AX();
  ~AX();
private:
  AXData* ax_data;
};

以下不会存在内存泄漏的写法是?

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 创建时即捕获析构动作,何解?

你不一定知道的智能指针细节 - 知乎 (zhihu.com)

文章作者: 极简
本文链接:
版权声明: 本站所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 后端技术分享
C/C++
喜欢就支持一下吧