实例化时使用 new 关键字的 C++ 指针和引用

标签 c++ class pointers reference

当我想用 C++ 实例化一个类时,我通常会这样做

Book bk = new Book();

我的教授最近这样做了

Book &bk = *new Book();

他只告诉我他会使用引用来使用点(例如 bk.getTitle();) 运算符而不是箭头(例如 bk->getTitle();)。我理解这部分代码,但是当您将 * 运算符与 new 结合使用时会发生什么?

提前致谢

完整的示例代码可以在 here 找到就是main函数中的arraystack

最佳答案

这个:

Book &bk = *new Book();

几乎等同于:

Book *p = new Book();  // Pointer to new book
Book &bk = *p;  // Reference to that book

但是有一个关键的区别;在原始代码中,您没有指针可用于在完成后delete动态分配的对象,因此您有效地创建了内存泄漏。

当然,你可以这样做:

delete &bk;

但那是非常非惯用的 C++,而且很可能在以后引起问题。

总而言之,编写这样的代码绝对没有充分的理由,所以不要这样做。以下任何一种都可以:

Book bk;
Book bk = Book();

关于实例化时使用 new 关键字的 C++ 指针和引用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9286390/

相关文章:

c++ - 模板链接器错误的显式实例化

c++ - 第二个无效响应在我的验证循环中被接受

c# - C#方法中的静态参数

c++ - 将 "this"指针转换为另一种类型不会违反严格的别名吗?

function - Golang - 为什么我可以从值类型调用指针接收器方法?

Visual Studio Community 2019 中的 C++ 代码分析产生警告 C26486 和 C26414

python - 找出 Numpy 是否/使用哪个 BLAS 库

python - 如何使用 turtle 父类(super class)

c++ - 如何在不传递类实例的情况下从静态成员函数调用非静态成员函数

C++ - 成员对象中枚举的行为