我看到在c++中有多种方法来分配和释放数据,我明白,当你调用malloc时你应该叫自由,当你使用新的操作符应与删除和对它是错误的把两个调用free()(例如,创建新的操作符),但是我不清楚我应该使用malloc / free,当我在现实世界中应该使用新的/删除程序。
如果你是c++专家,请告诉我你在这方面遵循的任何经验法则或惯例。
我看到在c++中有多种方法来分配和释放数据,我明白,当你调用malloc时你应该叫自由,当你使用新的操作符应与删除和对它是错误的把两个调用free()(例如,创建新的操作符),但是我不清楚我应该使用malloc / free,当我在现实世界中应该使用新的/删除程序。
如果你是c++专家,请告诉我你在这方面遵循的任何经验法则或惯例。
当前回答
malloc()在C语言中用于动态分配内存 而在c++中,同样的工作由new()完成。 所以你不能混合两种语言的编码习惯。 如果你问calloc和malloc()之间的差异,那就好了
其他回答
New vs malloc()
1) new是操作符,malloc()是函数。
2) new调用构造函数,而malloc()不调用。
3) new返回准确的数据类型,而malloc()返回void *。
4) new从不返回NULL(失败时会抛出),而malloc()返回NULL
5)重新分配内存不能由new处理,而malloc()可以
在c++中总是使用new。如果你需要一个无类型的内存块,你可以直接使用operator new:
void *p = operator new(size);
...
operator delete(p);
只使用malloc和free来分配将由以c为中心的库和api管理的内存。对你控制的所有东西使用new和delete(以及[]变量)。
new和delete操作符可以操作类和结构,而malloc和free只适用于需要强制转换的内存块。
使用new/delete将有助于改进代码,因为您不需要将已分配的内存强制转换为所需的数据结构。
New将初始化结构的默认值,并正确地将结构中的引用链接到结构本身。
E.g.
struct test_s {
int some_strange_name = 1;
int &easy = some_strange_name;
}
因此,new struct test_s将返回一个带有工作引用的初始化结构,而malloc'ed版本没有默认值,实习引用也没有初始化。