c++ - 虚拟析构函数 - C++

标签 c++ constructor

<分区>

我将基类析构函数定义为“虚拟”。 例如:-

class Base
{
public:
    virtual ~Base()
    {
        cout << "Calling ~Base()" << endl;
    }
};

并且也在派生类中,例如: 例如:-

class Derived: public Base
{
public:
    virtual ~Derived()
    {
        cout << "Calling ~Derived()" << endl;
    }
};

我的问题是如何在删除指向派生类对象的基类指针时调用两个析构函数。???????? 谢谢..,

最佳答案

一个类的实例在内存中构建为“建筑物”,其中基础是层次结构中的最高类。析构函数的调用顺序与构造函数相反。

含义:

Sub-Sub-class -> Sub-Class ->Class

析构函数总是被调用。销毁对象的一部分(子类)后,它的派生类将被销毁,依此类推。

您不必从子类中调用“ super ”析构函数的原因是必须始终调用析构函数。此外,与您可能没有默认构造函数(强制您显式调用 super 构造函数)的构造函数相反,析构函数不是这种情况。你总是有一个没有参数的析构函数,所以编译器总是可以告诉“哪个”析构函数调用(因为没有那么多选项)。

关于c++ - 虚拟析构函数 - C++,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17514420/

相关文章:

java - Java中如何保存对象?构造函数中的反序列化

c++ - QT4 中的蓝牙连接?

c++ - `boost::signals2` 中的信号签名是如何实现的?

java - 我可以将对象构造函数存储到数组或哈希表中吗?

java - 可变参数构造函数_可能_冲突,但可以编译

c++ - 使用可转换类型调用重载函数时模板构造函数歧义

c++ - 私有(private)或 protected 继承中的虚函数

c++ - 有没有办法在 Visual Studio 中获取某些 c++ 函数的调用图?

c++ - 使用 Boost.Phoenix 有什么好处?

c++ - 构造函数中没有匹配的调用函数 - C++ 11