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

时间:2012-11-12 20:58:43

标签: c++ reference

  

可能重复:
  Why does the use of ‘new’ cause memory leaks?

(如果有的话)有什么区别:

   Player player=*(new Player()); 

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

两者(似乎)都表现得一样,但我肯定会错过一些东西?!?

2 个答案:

答案 0 :(得分:4)

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

Player player=*(new Player()); 

使用copy-constructor复制初始化player

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

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

他们是相同的他们都吮吸

答案 1 :(得分:2)

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

Player player = *(new Player())

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

另一方面,

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

为新创建的对象创建引用命名播放器。因此,您可以访问该对象。特别是,您可以通过

释放内存并销毁该对象
delete &player;