相关疑难解决方法(0)

在什么情况下我使用malloc vs new?

我在C++中看到有多种方式来分配和释放数据,我知道当你打电话给malloc你时应该打电话free,当你使用new操作员时你应该配对,delete将两者混合是错误的(例如,调用free()创建的东西)与new操作员),但我不知道何时应该使用malloc/ free何时应该在我的真实世界程序中使用new/ delete.

如果您是C++专家,请告诉我您在此方面遵循的任何经验法则或惯例.

c++ malloc memory-management new-operator

447
推荐指数
12
解决办法
26万
查看次数

调用free()或delete而不是delete []有危险吗?

可能重复:
(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解除分配机制各自通话所采取的路线?

c++ free memory-management new-operator

6
推荐指数
2
解决办法
4770
查看次数

标签 统计

c++ ×2

memory-management ×2

new-operator ×2

free ×1

malloc ×1