拷贝构造与赋值运算符重载(顺序)

来源:互联网 发布:中国产业数据 编辑:程序博客网 时间:2024/05/21 19:32

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















0 0
原创粉丝点击