您当前的位置:首页 > 计算机 > 编程开发 > VC/VC++

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

时间:03-07来源:作者:点击数:

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

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

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

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

// 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 将基类和派生类的析构函数定义为虚函数是一种很好的编程习惯。

方便获取更多学习、工作、生活信息请关注本站微信公众号城东书院 微信服务号城东书院 微信订阅号
推荐内容
相关内容
栏目更新
栏目热门