other->l类类型 :找到合适的构造函数生成该类的对象(如果找不到实例化对象失败)
隐式调用构造函数 显示调用函数(无名对象(零时对象))
赋值运算符重载函数
分为3步
第一步 判断是不是自身赋值(防止失败出错)
第二步 释放this指针所指的(外部)空间的大小
第三步重新分配空间 拷贝数据;
对象的生存周期
全局对象和静态对象的生存周期最长
临时变量的生存周期只在该条语句结束后结束
但是有一中情况是特例
Goods &p=Good(); 无名对象变为有名对象
所以生存周期是栈上的周期
用一个零时变量拷贝构造对象时编译器会自己处理成一个构造函数
Goods p=Good();这个东西会处理为 GOOD P(); 如果实参是对象 形参是对象 是拷贝构造
如果是实参是临时对象形参是对象 是构造
如果实参是零时对象形参是引用 是拷贝构造
内置类型产生的临时量都是const
自定义产生的是变量
隐式调用产生的是cosnst对象
堆上开辟的对象 当调用玩那delete后析构
例子
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 = 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;
return 0;
}
Test t5(100, 100);
顺序: 构造全局对象t1
构造全局对象t5
构造全局对象t2
拷贝构造对象t3
构造对象t4
构造零时变量
赋值
析构零时变量
隐式调用构造
赋值
析构零时变量
构造堆上的变量
构造两个堆上的变量
构造一个零时变量
析构零时变量
构造零时变量 给个p4 名字
析构p1;
析构p2;
析构p4
析构t3
析构t2
析构t4
析构t5
析构t1