C++重载赋值运算符声明中做什么?

C++ what does & do in overloaded assignment operator declaration?

本文关键字:什么 声明 重载 赋值运算符 C++      更新时间:2023-10-16

可能的重复项:
为什么使用"new"会导致内存泄漏?

两者之间有什么区别(如果有的话):

   Player player=*(new Player()); 

和:

   Player &player=*(new Player());

两者(似乎)的行为方式相同,但我肯定会错过一些东西?!?

区别在于第一个创建副本,而第二个创建对new Player()返回的指针所指向的对象的引用。

Player player=*(new Player()); 
复制

使用复制构造函数初始化player

Player &player=*(new Player());

只是为 *(new Player()) 创建一个别名,这是有效的new Player()因为它不是临时的。 因此,Player& player = Player()是非法的。

它们是一样的,因为它们都很糟糕

>new Player()是一个表达式,用于在所谓的堆上创建一个对象(未命名)。表达式的结果是指向新创建对象的指针。现在当你这样做时

Player player = *(new Player())

定义一个名为 player 的变量,该变量是新创建的对象的副本。此外,您已经失去了对堆对象的所有句柄(访问权限),并且永远无法释放它占用的内存。

另一方面

Player &player=*(new Player());

为新创建的对象创建名为 player 的引用。因此,您可以访问该对象。特别是,您可以通过以下方式释放内存并销毁该对象

delete &player;