分类: C/C++
2009-10-13 22:11:34
#include
using namespace std;
class C{
public:
C(int i):n(i){cout << "Construct C" << i << endl;}
C(const C& c){n = c.n; cout << "Construct _C" << c.n << endl;}
~C(){cout << "Destruct C" << n << endl;n=-1;}
C& operator= (const C& c){cout << "Copy from C" << c.n << " to " << "C" << n << endl; n = c.n;return *this;}
private:
int n;
};
C f(int i)
{
C c(i);
return c;
}
int main()
{
C c0(2);
c0 = f(1);
printf("next\n");
C c4(4);
c4 = c0.copy();
return 0;
}
在csdn上看到的一个讨论, 下面在vc2005上测试的结果.
看函数f, 如果返回的是一个对象的引用, 则应该c为静态变量, 因为在函数返回时c已经被释放了
如果返回的是对象, 函数f中, 编译器会调用拷贝构造函数创建一个对象tmp, 然后释放c. 然后把tmp返回, 调用=运算赋值给c0, 然后再释放tmp. 如果类C未实现拷贝构造函数, 则系统会返回c. 但此时c已经被释放. 所以程序会出错.