当我想用 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/