我使用 C++ 已经有一段时间了,我一直想知道 new
关键字。简单地说,我应该使用它,还是不使用它?
- 使用
new
关键字…
MyClass* myClass = new MyClass();
myClass->MyField = "Hello world!";
- 没有
new
关键字…
MyClass myClass;
myClass.MyField = "Hello world!";
从实现的角度来看,它们似乎没有什么不同(但我确信它们是不同的)……但是,我的主要语言是 C#,当然第一种方法是我习惯的。
困难似乎在于方法 1 更难与 std C++ 类一起使用。
我应该使用哪种方法?
更新1:
我最近将 new
关键字用于 堆 内存(或 _空闲存储_)用于超出范围(即从函数返回)的大型数组。在我使用堆栈之前,这会导致一半元素在范围之外损坏,切换到堆使用可确保元素完好无损。耶!
更新 2:
我的一个朋友最近告诉我,使用 new
关键字有一个简单的规则;每次输入 new
时,输入 delete
。
Foobar *foobar = new Foobar();
delete foobar; // TODO: Move this to the right place.
这有助于防止内存泄漏,因为您总是必须将删除放在某处(即,当您将其剪切并粘贴到析构函数或其他位置时)。
原文由 Nick Bolton 发布,翻译遵循 CC BY-SA 4.0 许可协议
方法一(使用
new
)delete
您的对象。 (如果你不删除它,你可能会造成内存泄漏)delete
它。 (即您可以return
您使用创建的对象new
)delete
d;并且 应该始终删除 它,无论采用哪个控制路径,或者是否抛出异常。方法2(不使用
new
)delete
。return
指向堆栈上的对象的指针)至于使用哪一个;鉴于上述限制,您选择最适合您的方法。
一些简单的案例:
delete
(以及导致 内存泄漏 的可能性),则不应使用new
。new