C++重载赋值运算符声明中做什么?
C++ what does & do in overloaded assignment operator declaration?
可能的重复项:
为什么使用"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;
相关文章:
- C++避免重复声明的语法是什么
- 在 .h 文件中的类中声明静态变量和在.cpp文件中声明"global"变量有什么区别
- 是什么原因导致它无法编译?它是声明签名还是在函数本身的实现中
- 编译器对数组声明大小的计算。什么时候发生?
- 这个额外的关键字在这个 c++ 类声明中是什么意思?
- * 和 ** 在 C++ 函数声明中是什么意思?
- 在将函数声明为友元时,尖括号的含义是什么?
- 在以下声明中使用指针有什么区别?
- 如何声明一个标准::提升直方图的向量?提升直方图的类型是什么?
- 假设声明中某些上下文中需要的名称查找规则是什么
- C++ [错误] 声明'char '隐藏参数。什么意思?
- 用相同的参数声明两个构造函数的最偶像化的方法是什么?
- 朋友声明的复杂范围界定规则有什么意义?
- 当我尝试在函数内声明一个函数时,它不起作用?有什么建议吗?*源代码如下*
- 有什么方法可以在标头中定义和声明 extern 对象吗?
- C++中这个声明的向量是什么意思
- 如果真的需要std::move,我们应该什么时候声明右值refs
- 在c++中在类外声明函数有什么好处
- 我如何使用关系 btwn 3 整数来确定三角形和/或我可以使用什么声明来使这个程序工作
- 这是什么声明符