C++为什么不建议使用malloc,calloc,realloc来分配内存
2个回答
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;
}
* 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;
}
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询