使用指针或引用动态分配内存

时间:2018-09-11 11:48:15

标签: c++

下面的两个语句之间有明显区别吗?

MyClass &ref = *(new MyClass);

MyClass *ptr = (new MyClass);

3 个答案:

答案 0 :(得分:4)

第一个是引用,第二个是指针。参考不能更改。

总体上避免手动管理内存(这意味着根本不写新的/删除的内容)

答案 1 :(得分:2)

虽然可以更改指针,但引用不能更改,但我还是建议不要手动操作指针。

基于析构函数/构造函数的内存管理可以解决很多麻烦。

我还将考虑使用智能指针。

What is a smart pointer and when should I use one?

答案 2 :(得分:0)

从技术上讲,不是很多。

我的意思是,以后您无法将ref重新绑定到其他东西,就像您可以使ptr指向其他东西一样(尽管这可以说是一件好事)。

最大的问题是表达意图。我们所有人都有条件看到一个指针,并认为“啊哈,这个可能是动态分配的,如果没有别的,我需要知道该对象的生存期和所有权语义,以查看它是否必须为{ {1}} d”(如果您不这样做,则被泄露)。对于引用,实际上绝不是这种情况,我们通常指的是以下任何一种情况:

  • 引用对象不是动态分配的,或者
  • 通过本参考文献的范围并不打算让我做与参考者寿命有关的任何事情

您只需要使用该值并将其留在那。

因此,最大的问题是通过常规编码样式的代码清晰度。

但是,如果您是某种实用的小丑,则可以编写以下内容,这将是完全“有效的”:

delete

只需记住使用address-of运算符,即可再次获得int main() { int& ref = *(new int); delete &ref; } 的指针!

delete