class base
{
public:
base()
{
cout << "normal construct :"<<this << endl;
}
base(base &b)
{
cout << "copy construct this:"<<this<<" src:"<<&b << endl;
a = b.a;
}
base & operator = (const base &b)
{
cout << "= construct" << endl;
a = b.a;
return *this;
}
~base()
{
cout << "~base():"<<this << endl;
}
int a;
};
base testfun1()
{
base a;
cout << "a:"<<&a << endl;
return a;
{
public:
base()
{
cout << "normal construct :"<<this << endl;
}
base(base &b)
{
cout << "copy construct this:"<<this<<" src:"<<&b << endl;
a = b.a;
}
base & operator = (const base &b)
{
cout << "= construct" << endl;
a = b.a;
return *this;
}
~base()
{
cout << "~base():"<<this << endl;
}
int a;
};
base testfun1()
{
base a;
cout << "a:"<<&a << endl;
return a;
}
base & testfun2()
{
base a;
cout << "a:"<<&a << endl;
return a;
}
base a;调用普通构造函数
base c;调用普通构造函数
base b = a;调用拷贝构造函数
c = a;调用赋值构造函数
testfun1();调用普通构造a、拷贝构造、析构a,析构临时对象
testfun2();调用普通构造a,析构a
base d = testfun1();调用普通构造a、拷贝构造,析构a,临时对象被d接走,函数返回没有调用析构
base &d = testfun1();调用普通构造a,拷贝构造,析构a,临时对象被d接走,函数返回没有调用析构
base d = testfun2();调用普通构造a,析构a,拷贝构造函数
base &d = testfun2();调用普通构造a,析构a
d = testfun2();调用普通构造a,析构a,调用赋值构造函数
d = testfun1();调用普通构造a,拷贝构造,析构a,赋值构造,析构临时变量
函数返回引用,主要功能是避免临时变量生成(调用拷贝构造函数)