拷贝构造和赋值构造的发生时机

拷贝构造和赋值构造的发生时机

Test gt1; // 1
int main(){
		Test t1; //无参构造函数 3
		Test t2(t1); //拷贝构造 4
		Test t3 = t2;//拷贝构造 5
		static Test st = Test(); //静态局部变量的内存空间在运行时已经存在 6
		//但其构造初始化要到运行到语句所在处才开始
		// Test(20) 显式生成临时对象(出语句即析构)
		Test t4 = Test(20);// <==> Test t4(20) 原因在于编译器的优化 只会发生一次构造 7
		t4 = t2; //赋值函数 8
		t4 = Test(30); //会发生两次调用 构造临时对象+赋值函数 出语句析构临时变量 9
		t4 = (Test)30; //int->Test(int) 类型转换需要一个合适的参数类型的构造函数 10 
		t4 = 30; //同上但为隐式 11
		
		Test *p1 = new Test(30); //出语句不析构 堆上的对象在delete时析构
		Test *p2 = new Test[2];
		Test *p = &Test(40);
		// p point to a object which has been disconstruct
		const Test &ref = Test(50);
		// 引用延长了临时变量的生命周期
}
Test gt2; // 2

对象使用过程中背后调用了哪些方法

posted @ 2023-09-10 16:43  我非神灵  阅读(10)  评论(0)    收藏  举报