重新定义析构函数时的标准析构函数 是否可以调用默认析构函数,即使我已经为C++中的类重新定义了析构函数吗?例如,如果我有两门课 class B{ ... }; class A{ private: B* p; public: A(B b):p(new B(b)){...} ... ~A(){delete p;} };

重新定义析构函数时的标准析构函数 是否可以调用默认析构函数,即使我已经为C++中的类重新定义了析构函数吗?例如,如果我有两门课 class B{ ... }; class A{ private: B* p; public: A(B b):p(new B(b)){...} ... ~A(){delete p;} };,c++,pointers,destructor,C++,Pointers,Destructor,我并不总是想删除p所指的对象。析构函数只有一个可能的签名,所以不能定义多个版本 假设“标准析构函数”是指编译器默认生成的析构函数,答案是否定的。因为您定义了自己的析构函数,所以编译器不会生成默认析构函数。析构函数并不意味着像普通函数那样被“调用”(除非您实现了类似STL容器的东西) 如果您需要析构函数在不同的情况下执行不同的操作,请在析构函数中放入If(),并让对象跟踪If()条件所需的任何信息。无论如何,这可能是一个更好的设计。你的例子毫无意义。为什么您不想删除p?仅供参考删除空PTR是合法的

我并不总是想删除p所指的对象。

析构函数只有一个可能的签名,所以不能定义多个版本

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


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

你的例子毫无意义。为什么您不想删除
p
?仅供参考
删除空PTR
是合法的,保证不做任何事情。所以你可能想要
p=nullptr
@MooingDuck:如果你将内存的所有权转移到另一个组件,也许?你可以在解构器中删除一些类成员bool,比如doDeleteB。。。但是为什么要这样做呢?是的,可以通过重新定义声明指针对象的类的析构函数来删除指针对象。要做到这一点,不必重新定义指针对象的析构函数。