欢迎光临
我们一直在努力

C++构造函数和析构函数调用顺序详解

我们知道,每当创建一个类的对象时,编译器都会自动调用构造函数。由于派生类的每个对象都可以被认为具有嵌入其中的基类的对象,所以创建派生类对象涉及创建嵌入的基类对象。

编译器总是在调用派生类构造函数之前调用基类构造函数。这个顺序在派生类对象销毁时就刚好反过来,即派生类中的析构函数在基类的析构函数之前调用。

该顺序允许派生类的构造函数和析构函数在工作中使用基类的数据或成员函数。

下面的程序通过一个简单的程序演示了这种表现。

// This program demonstrates the order in which base and
//derived class constructors and destructors are called.
#include <iostream>
#include <memory>
using namespace std;

// Base class
class BaseDemo
{
    public:
        BaseDemo() // Constructor
        {
            cout << "This is the BaseDemo constructor. \n";
        }
        virtual ~BaseDemo() // Destructor
        {
            cout << "This is the BaseDemo destructor.\n";
        }
};

// Derived class
class DeriDemo : public BaseDemo
{
    public:
        DeriDemo() // Constructor
        {
            cout << "This is the DeriDemo constructor.\n";
        }
        virtual ~DeriDemo() // Destructor
        {
            cout << "This is the DeriDemo destructor.\n";
        }
};
int main()
{
    cout << "We will now create a DeriDemo obj ect.\n";
    shared_ptr<DeriDemo> d = make_shared<DeriDemo>(); cout << "The program is now going to,end.\n";
    return 0;
}

程序输出结果:

We will now create a DeriDemo obj ect.
This is the BaseDemo constructor.
This is the DeriDemo constructor.
The program is now going to,end.
This is the DeriDemo destructor.
This is the BaseDemo destructor.

注意,使用关键字 virtual 将基类和派生类的析构函数定义为虚函数是一种很好的编程习惯。

赞(0) 打赏
未经允许不得转载:hosteons中文网 » C++构造函数和析构函数调用顺序详解

评论 抢沙发

觉得文章有用就打赏一下文章作者

非常感谢你的打赏,我们将继续提供更多优质内容,让我们一起创建更加美好的网络世界!

支付宝扫一扫

微信扫一扫

登录

找回密码

注册