C++临时性对象的生命周期
2013-07-29 16:57
197 查看
C++临时性对象的生命周期
有关临时对象的生命周期有三种情况:
1)一般情况:临时性对象的被摧毁,应该是对完整表达式(full-expression)求值过程中的最后一个步骤。该完整表达式造成临时对象的产生。
实例代码如下:
运行结果为:
2)凡含有表达式执行结果的临时性对象,应该存留到object的初始化操作完成为止。
示例代码如下:
3)如果一个临时性对象被绑定于一个reference,对象将残留,直到被初始化之reference的生命结束,或直到临时对象的生命范畴(scope)结束——视哪一种情况先到达而定。
示例代码如下:
参考资料:
1. http://blog.csdn.net/lw1a2/article/details/1769004
2. 《深入探索C++对象模型》
有关临时对象的生命周期有三种情况:
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; }
运行结果为:
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; }运行结果为:
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; }运行结果:
参考资料:
1. http://blog.csdn.net/lw1a2/article/details/1769004
2. 《深入探索C++对象模型》
相关文章推荐
- C++临时性对象的生命周期详细解析
- C++线程安全的对象生命周期管理
- C++手稿:对象的生命周期,构造与析构
- 转载:对象生命周期 C++
- C++中各种对象的生命周期
- C++对象生命周期管理--通过引用计数指针对象来封装管理对象生命周期
- 探讨c++中的临时对象生命周期
- C++临时对象的生命周期
- c++对象的生命周期
- C++对象模型——临时性对象 (第六章)
- C++ 对象生命周期
- [C++杂记] C++对象的生命周期
- C++ 匿名对象的生命周期
- C++中 简单查看临时对象,局部对象的生命周期,及拷贝构造函数(测试代码)
- c++对象的生命周期
- C++内存布局与对象的生命周期
- [C++应用程序性能优化]对象的生命周期
- C++临时对象的生命周期
- C++ 对象的生命周期
- C++:析构函数、对象生命周期、类型转换构造、拷贝构造、拷贝赋值、深浅拷贝