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)
| 归档时间: |
|
| 查看次数: |
12679 次 |
| 最近记录: |