下面的两个语句之间有明显区别吗?
MyClass &ref = *(new MyClass);
MyClass *ptr = (new MyClass);
答案 0 :(得分:4)
第一个是引用,第二个是指针。参考不能更改。
总体上避免手动管理内存(这意味着根本不写新的/删除的内容)
答案 1 :(得分:2)
虽然可以更改指针,但引用不能更改,但我还是建议不要手动操作指针。
基于析构函数/构造函数的内存管理可以解决很多麻烦。
我还将考虑使用智能指针。
答案 2 :(得分:0)
从技术上讲,不是很多。
我的意思是,以后您无法将ref
重新绑定到其他东西,就像您可以使ptr
指向其他东西一样(尽管这可以说是一件好事)。>
最大的问题是表达意图。我们所有人都有条件看到一个指针,并认为“啊哈,这个可能是动态分配的,如果没有别的,我需要知道该对象的生存期和所有权语义,以查看它是否必须为{ {1}} d”(如果您不这样做,则被泄露)。对于引用,实际上绝不是这种情况,我们通常指的是以下任何一种情况:
您只需要使用该值并将其留在那。
因此,最大的问题是通过常规编码样式的代码清晰度。
但是,如果您是某种实用的小丑,则可以编写以下内容,这将是完全“有效的”:
delete
只需记住使用address-of运算符,即可再次获得int main()
{
int& ref = *(new int);
delete &ref;
}
的指针!
delete