C++11 即使类仅由智能指针组成,我们是否应该delclare/定义析构函数?

C++11 即使类仅由智能指针组成,我们是否应该delclare/定义析构函数?,c++11,smart-pointers,unique-ptr,C++11,Smart Pointers,Unique Ptr,这是多余的吗 我们应该像下面那样显式地编写析构函数吗 class A{ public: A():p(nullptr){}; private: std::unique_ptr<B> p; // B is some class }; 不。智能指针的全部意义在于,内存是自动为您管理的 这是多余的吗 不,这是未定义的行为-将执行“双重自由”。即使为a提供析构函数,也会调用p的析构函数。ptr未声明。如果你的意思是p,p不是一个原始指针。我调试了它

这是多余的吗

我们应该像下面那样显式地编写析构函数吗

class A{
   public:
       A():p(nullptr){};
   private:
       std::unique_ptr<B> p;  // B is some class
 };
不。智能指针的全部意义在于,内存是自动为您管理的

这是多余的吗


不,这是未定义的行为-将执行“双重自由”。即使为
a
提供析构函数,也会调用
p
的析构函数。

ptr
未声明。如果你的意思是
p
p
不是一个原始指针。我调试了它:-9
~A(){
      delete p;
}