C++ 如何重载析构函数?

C++ 如何重载析构函数?,c++,C++,如何重载析构函数?你不能。C++中每个类只有一个析构函数。p> 您可以做的是创建一个私有析构函数,然后使用几个公共方法以新的有趣的方式调用析构函数 class Foo { ~Foo() { ... } public: DestroyFoo(int) { ... }; DestroyFoo(std::string) { ... } }; 你不能!每个类只能有一个析构函数。你怎么可能有不止一个?析构函数自动触发;语言不可能知道该叫哪一个 然而,虚拟析构函数是另一回事。你没有。一个类中不

如何重载析构函数?

你不能。C++中每个类只有一个析构函数。p> 您可以做的是创建一个私有析构函数,然后使用几个公共方法以新的有趣的方式调用析构函数

class Foo {
  ~Foo() { ... }
public:
  DestroyFoo(int) { ... };
  DestroyFoo(std::string) { ... }
};

你不能!每个类只能有一个析构函数。你怎么可能有不止一个?析构函数自动触发;语言不可能知道该叫哪一个


然而,虚拟析构函数是另一回事。

你没有。一个类中不能有两个析构函数


您想实现什么?

重载意味着具有多个同名函数,这些函数采用不同的参数。像
swap(int&a,int&b)
swap(double&a,double&b)
。析构函数不接受任何参数。重载它是没有意义的


如果您在销毁对象时需要根据特定情况执行不同的操作,然后,您只需要在析构函数中使用适当的if语句来检查这些情况。

有趣的问题,但您希望重载析构函数的唯一原因是因为您希望在一个析构函数中释放一些资源,并将其留在另一个析构函数中,对吗

基本上,您可以通过使用额外的布尔值从自己的析构函数实现这种行为,该值将告诉您是否应该释放特定的资源。该布尔值将在构造函数和/或其他方法中设置,并在析构函数中检查是否已设置。如果未设置,则您将释放资源。否则,您只需离开资源,其他任务可能会释放它。(当您在多个对象之间共享资源时,这是有意义的。)


不能重载析构函数的原因是,代码不知道在销毁对象时需要调用哪个析构函数。除非你调用析构函数很糟糕,但是你的行为很糟糕!;-)

您不会重载析构函数,因为您从未调用过它。
这是它的基本要点。(根据我们在课堂上的复习。)

@Qberticus,是的,在某些方面是这样的。仍然没有任何东西可以阻止OP创建一个额外的类,该类具有简单的RAII并以一种有趣的方式销毁Foo。如果没有OP的更多信息,我就说不出来了。我希望OP能考虑到这一点,并在他们的解决方案中考虑到这一点。既然你不能,你知道如何使用重载析构函数吗,或者你只是好奇?如果你想做一些事情,而不仅仅是为一个类生成两个析构函数,那么就把它提出来,我们可以讨论如何实现它。我想知道这是否可能,你会期望它如何表现?这是别人提出来的问题。他们想看看他们的反应有多快,这证明了这一点。他们现在对此非常兴奋。我在谷歌上搜索了这个确切的问题。如果可能的话,我希望使用一个具有给定签名的析构函数来销毁一个使用相同签名的构造函数创建的对象:
Node(int,Node*)
将对应于
~Node(int,Node*)