为什么一个类只有一个析构函数?

Ras*_*yak 4 c++

我被问到一个问题,一个班级有,multiple constructors但为什么它只有one destructor

我举了下面的例子,

class abc
{
public:
    int a;
    abc()
    {
        cout << "Default\n";
    }
    abc(int)
    {
        cout << "Int\n";
    }
    ~abc()
    {
        cout << "Destructor\n";
    }
};
int main()
{
    abc ab;
    abc a(5);
}
Run Code Online (Sandbox Code Playgroud)

我在abc之前解释过(5); 被调用的析构函数将被调用,因此在特定时间点只会有一个对象.我现在在我的电脑上运行上面的代码,但它给了我输出

Default
Int
Destructor
Destructor
Run Code Online (Sandbox Code Playgroud)

如果是这样,那么我们为什么one destructor呢?

Rah*_*thi 8

析构函数没有参数,因此只能有一个参数.但是,您可以拥有多个构造函数,因为您可以重载构造函数,这是Destructors无法实现的.还要添加析构函数用于终止类的实例并释放它正在使用的所有资源.当您摧毁对象时没有任何可选项.调用析构函数时,实例将不存在.

虽然是一个非常奇怪的例子来解释它,但是如果你有1个苹果和1个番石榴,那么你将使用1刀切割它.;)

析构函数通常用于释放内存,并在销毁对象时对类对象及其类成员执行其他清理.当该对象超出范围或被显式删除时,将为类对象调用析构函数.

在abc之前(5); 被调用的析构函数将被调用

不会因为隐式调用析构函数而不会调用它.

在旁注: -

但是,如果您计划明确调用析构函数(大多数程序员不会建议),那么管理资源将完全是您的责任.编译器不会处理它,它可能会导致严重的内存问题.您可以查看此C++ FAQ解释它.