C++为什么不建议使用malloc,calloc,realloc来分配内存

 我来答
风若远去何人留
2017-06-07 · 知道合伙人互联网行家
风若远去何人留
知道合伙人互联网行家
采纳数:20412 获赞数:450134
专业C/C++软件开发

向TA提问 私信TA
展开全部
第一个 C++里面有new 和delete可以实现类似功能。
malloc系列是函数,而new是操作符 用new更高效
第二个 对于对象的内存分配 使用new可以调用构造函数
而用malloc则不会, 所以有可能出现不可预知问题, 尤其是派生类对象,如果有虚函数表,那么用malloc出来的类对象,使用就是一场灾难
匿名用户
2017-06-07
展开全部
/*
* File: main.cpp
* Author: Vicky.H
* Email: eclipser@163.com
*/
#include <iostream>
#include <cstdlib>
#include <memory>

class A {
public:

A() {
std::cout << "create A" << std::endl;
}

A(const A& o) {
std::cout << "copy A" << std::endl;
}

~A() {
std::cout << "delete A" << std::endl;
}
};

/*
*
*/
int main(void) {

char* buf1 = (char*) malloc(10); //
char* buf2 = (char*) calloc(1, 10); // 效果虽然与上面一样,不同的是,calloc会将空间初始化为0.

free(buf1);
free(buf2);

std::cout << "---------------------------" << std::endl;

// 为什么C++中不建议使用malloc calloc realloc等C语言函数?因为:这样分配的空间,返回的指针需要通过free来释放,但free释放空间不同于delete,free不会执行析构函数!

A* ap = (A*) malloc(sizeof (class A) * 10);
std::uninitialized_fill_n(ap, 10, A());
free(ap); // 调用1次create A ,1次delete A 10次copy A
return 0;
}
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式