手机
当前位置:查字典教程网 >编程开发 >C语言 >C++临时性对象的生命周期详细解析
C++临时性对象的生命周期详细解析
摘要:有关临时对象的生命周期有三种情况:1)一般情况:临时性对象的被摧毁,应该是对完整表达式(full-expression)求值过程中的最后一个...

有关临时对象的生命周期有三种情况:

1)一般情况:临时性对象的被摧毁,应该是对完整表达式(full-expression)求值过程中的最后一个步骤。该完整表达式造成临时对象的产生。

实例代码如下:

复制代码 代码如下:

#include <iostream>

using namespace std;

class A

{

public:

A(int i): m_i(i)

{

cout << "A(): " << m_i << endl;

}

~A()

{

cout << "~A(): " << m_i << endl;

}

A operator+(const A& rhs)

{

cout << "A operator+(const A& rhs)" << endl;

return A(m_i + rhs.m_i);

}

int m_i;

};

int main()

{

A a1(1), a2(2);

a1 + a2;

cout << "------------------------------------" << endl; //运行到这里,a1 + a2产生的临时变量已经被释放

return 0;

}

运行结果为:

C++临时性对象的生命周期详细解析1

2)凡含有表达式执行结果的临时性对象,应该存留到object的初始化操作完成为止。

示例代码如下:

复制代码 代码如下:

#include <iostream>

using namespace std;

class A

{

public:

A(int i = 0): m_i(i)

{

cout << "A(): " << m_i << endl;

}

~A()

{

cout << "~A(): " << m_i << endl;

}

A operator+(const A& rhs)

{

cout << "A operator+(const A& rhs)" << endl;

return A(m_i + rhs.m_i);

}

A& operator=(const A& rhs)

{

cout << "A& operator=(const A& rhs)" << endl;

m_i += rhs.m_i;

return *this;

}

int m_i;

};

int main()

{

A a1(1), a2(2);

A a3;

a3 = a1 + a2; //a1 + a2产生的临时变量在a3的赋值操作完成后,才释放

return 0;

}

运行结果为:

C++临时性对象的生命周期详细解析2

3)如果一个临时性对象被绑定于一个reference,对象将残留,直到被初始化之reference的生命结束,或直到临时对象的生命范畴(scope)结束——视哪一种情况先到达而定。

示例代码如下:

复制代码 代码如下:

#include <iostream>

using namespace std;

class A

{

friend ostream& operator<<(ostream& os, const A&);

public:

A()

{

}

A(const A&)

{

cout << "A(const A&)" << endl;

}

~A()

{

cout << "~A()" << endl;

}

};

ostream& operator<<(ostream& os, const A&)

{

os << "ostream& operator<<(ostream& os, const A&)" << endl;

return os;

}

const A& f(const A& a)

{

return a;

}

int main(int argc, char* argv[])

{

{

const A& a = A();

cout << "-------------------" << endl;

}//直到被初始化之reference的生命结束

cout << f(A()) << endl; //直到临时对象的生命范畴(scope)结束:

//临时对象的const引用在f的参数上(而不是返回值)。

//这个引用在f()返回的时候就结束了,但是临时对象未必销毁。

cout << "-------------------" << endl;

return 0;

}

运行结果:

C++临时性对象的生命周期详细解析3

【C++临时性对象的生命周期详细解析】相关文章:

C++ 模版双向链表的实现详解

C与C++ 无参函数的区别解析

C++ new/delete相关知识点详细解析

c_str()的用法详细解析

c++中.dll与.lib文件的生成与使用的详解

C++之异常处理详解

基于C++字符串替换函数的使用详解

C++中sprintf()函数的使用详解

二叉搜索树的插入与删除(详细解析)

深入C++ 函数映射的使用详解

精品推荐
分类导航