我使用C ++已有很短的时间了,而且我一直在想new关键字。简而言之,我应该使用它吗?
1)使用新关键字...
MyClass* myClass = new MyClass();
myClass->MyField = "Hello world!";
2)没有新关键字...
MyClass myClass;
myClass.MyField = "Hello world!";
从实现的角度看,它们似乎没有什么不同(但是我敢肯定它们是...)。但是,我的主要语言是C#,当然第一种方法是我习惯的。
困难似乎是方法1与std C ++类一起使用更困难。
我应该使用哪种方法?
更新1:
最近,我将new关键字用于超出范围(即从函数返回)的大型数组的堆内存(或free store)。在使用堆栈之前,该堆栈导致一半的元素在范围之外损坏,切换到堆使用情况可确保元素完好无损。好极了!
更新2:
我的一个朋友最近告诉我,使用new
关键字有一个简单的规则;每次键入时new
,请键入delete
。
Foobar *foobar = new Foobar();
delete foobar; // TODO: Move this to the right place.
这有助于防止内存泄漏,因为您始终必须将删除项放在某个位置(例如,将其剪切并粘贴到析构函数或其他方法时)。
std::vector
和)相比,这是一种更好的技术std::shared_ptr
。这些包装给您的呼叫new
以及delete
为您服务的呼叫,因此您泄漏内存的可能性更低。例如,问问自己:您是否始终记得在delete
可能引发异常的地方放置对应的内容?delete
手工放入s比您想象的要难。