即使我在C ++中为类重新定义了析构函数,是否可以调用默认的析构函数?例如,如果我有两个班级
class B{
...
};
class A{
private:
B* p;
public:
A(B b):p(new B(b)){...}
...
~A(){delete p;}
};
我并不总是想删除p。
指向的对象答案 0 :(得分:6)
假设“标准析构函数”是指您的编译器默认生成的那个,答案是否。因为您定义了自己的析构函数,所以编译器根本不会生成默认的析构函数。无论如何,析构函数并不像普通函数那样被“调用”(除非你实现类似STL容器的东西)。
如果您需要析构函数在不同情况下执行不同的操作,请在析构函数中放置一个if(),并让对象跟踪if()条件所需的任何信息。无论如何,这可能是一个更好的设计。
答案 1 :(得分:2)
析构函数只有一个可能的签名,因此您无法定义多个版本。