c++中临时对象的问题
- C/C++ code
class B{ ....};B play (){ B b; return b;}B play2(B b){ return b;}void main(){ 情况一、B t1 = play(); // 会析构2次,因为一次是return b;返回的临时对象,还有一次是t1对象析构 情况二、B t2 = play2(5); // 编译器会析构2次, // 我觉得会是3次,5传入的一次临时对象,return b;返回的临时对象,还一次是t2对象析构}整体还是对临时对象不怎么理解。。。
[解决办法]
再算上编译器可能进行的优化(例如多次构造临时变量且其中没有操作,则优化构造复制次数,或转化为复制构造函数等),就更复杂了
简单地说,别写这种过程不明确的代码
用指针或者引用来避免复制,绝对避免可能被优化的多次复制——除非复制的是直接按值传递的基本数据类型