例题:请给出下面对象创建过程中涉及的方法打印
#include <iostream>
using namespace std;
class Test
{
public:
Test(int a=5, int b=5):ma(a), mb(b)
{
cout<<"Test(int, int)"<<endl;
}
~Test()
{
cout<<"~Test()"<<endl;
}
Test(const Test &src):ma(src.ma), mb(src.mb)
{
cout<<"Test(const Test&)"<<endl;
}
void operator=(const Test &src)
{
ma = src.ma;
mb = src.mb;
cout<<"operator="<<endl;
}
private:
int ma;
int mb;
};
Test t1(10, 10);//程序运行时开辟,程序结束时销毁
int main()
{
Test t2(20, 20);//调用带两个参数的构造函数
Test t3=t2;//调用拷贝构造函数
static Test t4 = Test(30, 30);//调用拷贝构造函数
t2 = Test(40, 40);//调用构造函数构造临时对象 赋值运算符的重载函数 析构函数
t2 = (Test)(50, 50);//强转相当于逗号表达式 :等价于t2=(Test)50;调用调用构造函数构造临时对象 调用赋值运算符的重载函数 析构函数
t2 = 60;//隐式生成临时对象 构造函数 赋值运算符的重载函数 析构函数
Test *p1 = new Test(70, 70);//产生内存 调用构造函数
Test *p2 = new Test[2];//产生内存 构造函数
Test *p3 = &Test(80, 80);//构造函数 析构函数
Test &p4 = Test(90, 90);//构造函数
delete p1;//析构函数
delete []p2;//析构函数
}
Test t5(100, 100);//构造函数
最后析构的顺序是先构造的后析构
需要注意的是:
t1 和 t5是全局对象 程序一运行就创建好了 直到程序结束时销毁
程序运行结果