1:函数的返回值是一个元素 (复杂类型) 返回的是一个新的匿名对象(所以会调用匿名对象类的copy构造函数)
2:匿名对象的去和留
如果用匿名对象 初始化 另一个同类型的对象 匿名对象 转成有名对象
如果用匿名对象 =赋值给 另一个同类型的对象 匿名对象 被析构
class MyPos
{
public:
MyPos(int x,int y)
{
m_x = x;
m_y = y;
cout <<"初始化构造函数"<< m_x << m_y << endl;
}
MyPos(const MyPos & obj)
{
m_x = obj.m_x;
m_y = obj.m_y;
cout << "初始化复制构造函数" << m_x << m_y << endl;
}
~MyPos()
{
cout << "GameObject Destroy..." << endl;
}
int GetX()
{
return m_x;
}
int GetY()
{
return m_y;
}
private:
int m_x, m_y;
};
//返回一个新的对象(没有名字 匿名对象)
MyPos f()
{
MyPos p(2, 3);
return p;
}
void PlayObj()
{
//1.初始化
//用匿名对象初始化m 此时C++编译器 直接把匿名对象转成m(转正) 从匿名转成有名
MyPos m = f();
cout << "匿名对象 被转正 不会被析构掉" << endl;
cout << m.GetX() << endl;
//2.赋值
MyPos m2(1, 2);
m2 = f();//用匿名对象赋值给m2对象,然后匿名对象析构
cout << "匿名对象 被析构掉" << endl;
cout << m2.GetX() << endl;
}
int main()
{
PlayObj();
system("pause");
return 0;
}