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

时间:2015-01-23 20:33:55

标签: c++ pointers destructor

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

class B{
  ...
};

class A{
private:
   B* p;
public:
   A(B b):p(new B(b)){...}
   ...
   ~A(){delete p;}
};

我并不总是想删除p。

指向的对象

2 个答案:

答案 0 :(得分:6)

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

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

答案 1 :(得分:2)

析构函数只有一个可能的签名,因此您无法定义多个版本。