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

tim*_*tim 12 c++ pointers reference class

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

Book bk = new Book();
Run Code Online (Sandbox Code Playgroud)

我的教授最近这样做了

Book &bk = *new Book();
Run Code Online (Sandbox Code Playgroud)

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

提前致谢

完整的示例代码可以在这里找到它是main函数中的arraystack

Oli*_*rth 20

这个:

Book &bk = *new Book();
Run Code Online (Sandbox Code Playgroud)

几乎相当于这个:

Book *p = new Book();  // Pointer to new book
Book &bk = *p;  // Reference to that book
Run Code Online (Sandbox Code Playgroud)

但是有一个至关重要的区别; 在原始代码中,您没有可以delete在完成动态分配的对象时使用的指针,因此您有效地创建了内存泄漏.

当然,你可以这样做:

delete &bk;
Run Code Online (Sandbox Code Playgroud)

但这非常非惯用的C++,很可能会在以后引发问题.

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

Book bk;
Book bk = Book();
Run Code Online (Sandbox Code Playgroud)

  • `delete &bk;` 会导致什么问题?只是出于好奇。 (2认同)