重构时析构函数的标准析构函数

Mar*_*ark 0 c++ pointers destructor

即使我在C++中为类重新定义了析构函数,是否可以调用默认的析构函数?例如,如果我有两个班级

class B{
  ...
};

class A{
private:
   B* p;
public:
   A(B b):p(new B(b)){...}
   ...
   ~A(){delete p;}
};
Run Code Online (Sandbox Code Playgroud)

我并不总是想删除p指向的对象.

Ixr*_*rec 6

假设"标准析构函数"是指您的编译器默认生成的那个,答案是否定的.因为您定义了自己的析构函数,所以编译器根本不会生成默认的析构函数.无论如何,析构函数并不像普通函数那样被"调用"(除非你实现类似STL容器的东西).

如果您需要析构函数在不同情况下执行不同的操作,请在析构函数中放置if(),并让对象跟踪if()条件所需的任何信息.无论如何,这可能是一个更好的设计.