(C++)设 A 为基类,AX 为派生类,
class A {
public:
A();
~A();
Data* data;
};
class AX : public A {
public:
AX();
~AX();
AXData* ax_data;
}; 以下不会内存泄漏的写法吗?
class A {
public:
A();
~A();
Data* data;
};
class AX : public A {
public:
AX();
~AX();
AXData* ax_data;
}; 以下不会内存泄漏的写法吗?
AX* p = new AX(); delete p;
A* p = new AX(); delete p;
std::shared_ptr<AX> p{new AX()};std::shared_ptr<A> p{new AX()};对于D选项,在万能的知乎中找到了解释,简单地说,“智能指针解引用时的指针” 和“所有共享所有权的智能指针共同管理的对象”未必是相同的类型;在引用计数为0时销毁所管理的对象会调用当初赋值时的对象类型;
附上知乎链接:
基类智能指针析构派生类对象的问题?