您的位置:首页 > 编程语言 > C语言/C++

C++中对象的生存周期

2017-11-22 15:51 351 查看
在C中有变量的生存周期,那么在C++中就有对象的生存周期。

(1)普通对象的生存周期

若有一个CObject类,属性是姓名和年龄。

CObject gobject1;

int main()

{

CObject object1;

CObject object2("宝宝",10);

return 0;

}

CObject gobject2;

函数调用的先后顺序是:

构造函数:gobject1

          gobject2

          object1

          object2

先构造全局后构造局部。

析构函数:object2

          object1

          gobject2

          gobject1

先构造的后析构。

在堆上开辟一个对象,生存周期为从new到delete,如果没有delete,则不会析构。

CObject("object",1);//生成一个临时对象(显式生成)

(2)临时对象的生存周期

int main()

{

CObject object1;//①

CObject object2("object2",2);//②

object1=CObject("object1",2);//③

CObject 3=CObject("object3",2);//④

}

①调用默认构造函数。

②调用带两个参数的构造函数,显式构造。

③相当于赋值,调用带两个参数的构造函数,运算符重载函数。生成对象时不知道对象名会生成临时对象,临时对象的生存周期是调用的那句完后';'后立马析构。

④相当于初始化,无临时对象生成,因为系统进行了优化,以构造临时量的方法构造了object3。

CObject object1=CObject("object1",2);

CObject object2;

object2=(CObject)("object",2);//生成临时对象,调用带一个参数的构造函数 <=>object2=Cobject(2)

调用的函数:

带两个参数的构造函数

不带参数的构造函数

生成临时对象(带一个参数的构造函数)

赋值运算符重载函数

析构掉临时对象的函数

CObject *pobject=&CObject("pobject",1);//生成1个对象,调用一个构造,一个析构

CObject &pobject=CObject("pobject",1);//生成一个临时对象,调用一个构造,无析构

引用一个临时对象,临时对象的生存周期就变成了引用这个对象的生存周期。

CObject object1=CObject("object1",2);

CObject object2=(CObject)("object2",2);//隐式构造

object1=2;//隐式生成临时对象,调用带一个参数的构造函数,赋值运算符重载函数,析构函数

CObject object2=2;//隐式构造,无临时对象生成(系统进行优化)

若有:

void fun1(CObject rhs){}

void fun2(CObject &rhs){}

void fun3(CObject *rhs){}

在main函数里进行如下操作:

CObject object1;

fun1(object1);//无参构造函数,拷贝构造函数(实参穿形参)

fun1(CObject("pobject",1));//带两个参数的构造函数

fun2(object1);

fun2(CObject("pobject",1));//引用一个临时对象生存周期延长

fun3(&object1);//可使用

fun3(&CObject("pobject",1));//可访问

临时量产生的类型:

1、内置类型,产生的临时量是常量

2、类类型,产生的临时量是变量

3、隐式产生的临时量也是常量

赋值运算符的重载函数:

1、修饰形参不能改变

2、接受隐式产生的临时量
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: