我在C++中看到有多种方式来分配和释放数据,我知道当你打电话给malloc你时应该打电话free,当你使用new操作员时你应该配对,delete将两者混合是错误的(例如,调用free()创建的东西)与new操作员),但我不知道何时应该使用malloc/ free何时应该在我的真实世界程序中使用new/ delete.
如果您是C++专家,请告诉我您在此方面遵循的任何经验法则或惯例.
可能重复:
(POD)释放内存:删除[]是否等于删除?
是否delete将元素释放到数组中的第一个元素之外?
char *s = new char[n];
delete s;
Run Code Online (Sandbox Code Playgroud)
在上述情况下是否重要,因为所有元素s都是连续分配的,并且不应该delete仅仅是数组的一部分?
对于更复杂的类型,会delete调用超出第一个对象的析构函数吗?
Object *p = new Object[n];
delete p;
Run Code Online (Sandbox Code Playgroud)
如何delete[]推断Object超出第一个的s 数,这是不是意味着它必须知道分配的内存区域的大小?如果出于性能原因为内存区域分配了一些突出怎么办?例如,可以假设并非所有分配器都提供单个字节的粒度.然后,任何特定的分配都可能超过每个元素所需的大小或整个元素.
对于原始类型,例如char,,int之间有什么区别:
int *p = new int[n];
delete p;
delete[] p;
free p;
Run Code Online (Sandbox Code Playgroud)
除了通过delete- > free解除分配机制各自通话所采取的路线?