(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时销毁所管理的对象会调用当初赋值时的对象类型;
附上知乎链接:
基类智能指针析构派生类对象的问题?