如何重载析构函数?
答案 0 :(得分:34)
你做不到。在C ++中,每个类只有一个析构函数。
你可以做的是创建一个私有的析构函数,然后有几个公共方法以新的和有趣的方式调用析构函数。
class Foo {
~Foo() { ... }
public:
DestroyFoo(int) { ... };
DestroyFoo(std::string) { ... }
};
答案 1 :(得分:4)
有趣的问题,但是你想要重构析构函数的唯一原因是因为你想在一个析构函数中释放一些资源并将其留在另一个析构函数中,对吗?
基本上,您可以通过使用额外的布尔值从您自己的析构函数中实现此类行为,该值将告诉您是否应释放特定资源。这个布尔值将在你的构造函数和/或你的一个其他方法中设置,并在你的析构函数中检查它是否已设置。如果没有设置,那么你将释放资源。否则,您只需保留资源,可能还有其他任务将释放它。 (当您在多个对象之间共享资源时,这将有意义。)
您不能重载析构函数的原因是因为您的代码不会知道在销毁对象时需要调用哪个析构函数。除非你严重打电话给析构函数,否则你表现得很糟糕! ; - )
答案 2 :(得分:3)
重载意味着具有多个具有相同名称的函数,这些函数采用不同的参数。与swap(int &a, int &b)
和swap(double &a, double &b)
一样。析构函数不带参数。重载它没有意义。
如果在根据特定情况销毁对象时需要执行不同的操作,那么您只需要在析构函数中使用相应的if语句来检查这些情况。
答案 3 :(得分:1)
你不能!每个类只能有一个析构函数。你怎么能有一个以上?析构函数自动触发;语言无法知道应该拨打哪一个。
然而,虚拟析构函数是另一回事。答案 4 :(得分:0)
你没有。你不能在一个班级中拥有2个析构函数。
你想要完成什么?
答案 5 :(得分:0)
你没有重构析构函数,因为你从不调用它。 这是它的基本要点。 (根据我们在课堂上的内容。)