无名临时对象的析构问题
值返回函数,若返回对象temp,则先利用拷贝构造函数将返回的对象拷贝到临时对象ob中,再将temp析构,而ob的析构时间是执行完调用这个函数的语句
如下面这段代码
class ctest
{
public:
ctest(int x=0):a(x){
cout<<"构造对象("<<a<<")\n";
}
ctest(const ctest &t):a(t.a){
cout<<"拷贝构造对象("<<a<<")\n";
}
~ctest(){ cout<<"析构对象("<<a<<")\n";}
ctest &Add(){
++a;
return *this;
}
ctest add(){
ctest temp(*this);
++a;
return temp;
}
friend ostream & operator <<(ostream& out,const ctest &c){
out<<c.a;
return out;
}
private:
int a;
};
int main(){
ctest a(100),b(200);
cout<<a<<", "<<b<<endl;
a.Add().Add();
b.add().add();
cout<<a<<", "<<b<<endl;
a.~ctest();
b.~ctest(