我看到在c++中有多种方法来分配和释放数据,我明白,当你调用malloc时你应该叫自由,当你使用新的操作符应与删除和对它是错误的把两个调用free()(例如,创建新的操作符),但是我不清楚我应该使用malloc / free,当我在现实世界中应该使用新的/删除程序。
如果你是c++专家,请告诉我你在这方面遵循的任何经验法则或惯例。
我看到在c++中有多种方法来分配和释放数据,我明白,当你调用malloc时你应该叫自由,当你使用新的操作符应与删除和对它是错误的把两个调用free()(例如,创建新的操作符),但是我不清楚我应该使用malloc / free,当我在现实世界中应该使用新的/删除程序。
如果你是c++专家,请告诉我你在这方面遵循的任何经验法则或惯例。
当前回答
从较低的角度来看,new将在提供内存之前初始化所有内存,而malloc将保留内存的原始内容。
其他回答
从较低的角度来看,new将在提供内存之前初始化所有内存,而malloc将保留内存的原始内容。
只使用malloc和free来分配将由以c为中心的库和api管理的内存。对你控制的所有东西使用new和delete(以及[]变量)。
如果你正在使用c++,尝试使用new/delete而不是malloc/calloc,因为它们是操作符。对于malloc/calloc,需要包含另一个头文件。不要在同一代码中混合使用两种不同的语言。它们的工作在各个方面都是相似的,都是从哈希表的堆段动态分配内存。
要回答您的问题,您应该知道malloc和new之间的区别。区别很简单:
malloc分配内存,而new分配内存并调用要分配内存的对象的构造函数。
因此,除非仅限于使用C,否则永远不要使用malloc,特别是在处理c++对象时。这将会破坏你的程序。
free和delete的区别也是一样的。不同之处在于,delete除了释放内存外,还会调用对象的析构函数。
如果你有C代码,你想移植到c++,你可能会留下任何malloc()调用。对于任何新的c++代码,我建议使用new。