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

来源:互联网 发布:马里亚纳网络是什么 编辑:程序博客网 时间:2024/04/28 02:32

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

 

/*  * 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;}


---------------------------
create A
copy A
copy A
copy A
copy A
copy A
copy A
copy A
copy A
copy A
copy A
delete A

虽然实例程序,对空间的分配释放没有任何错误,但在某些情况,比如A类的析构伴随着某些特殊处理,将导致程序异常!

原创粉丝点击