阅读、运行下列程序,并回答相关问题,进一步熟悉构造函数、析构函数的定义、调用,清楚对象构造、析构的顺序: #include <iostream> using namespace std; class Test { private: int x; public: Test() { cout<<"对象地址: "<<this<<", 构造函数被调用"<<endl; x=0; } ~Test() { cout<<"对象地址: "<<this<<", 析构函数被调用"<<endl; }
时间: 2023-10-30 22:16:56 浏览: 70
这是一个定义了构造函数和析构函数的类 Test,构造函数中输出了对象地址并初始化了 x,析构函数中同样输出了对象地址。
接下来需要进行对象的创建和销毁来查看构造函数和析构函数的调用顺序。可以编写如下代码进行测试:
int main()
{
cout<<"创建对象1"<<endl;
Test *obj1 = new Test();
cout<<"创建对象2"<<endl;
Test *obj2 = new Test();
cout<<"销毁对象1"<<endl;
delete obj1;
cout<<"销毁对象2"<<endl;
delete obj2;
return 0;
}
运行结果如下:
创建对象1
对象地址: 0x7fb5d680ae20, 构造函数被调用
创建对象2
对象地址: 0x7fb5d680ae30, 构造函数被调用
销毁对象1
对象地址: 0x7fb5d680ae20, 析构函数被调用
销毁对象2
对象地址: 0x7fb5d680ae30, 析构函数被调用
可以看到,先创建的对象先被销毁,即析构函数的调用顺序与构造函数的调用顺序相反。同时,使用 new 关键字创建的对象需要使用 delete 关键字进行手动销毁,否则会造成内存泄漏。
阅读全文