关于new,这一篇文章较好,较明白得解释了operator new 和 new operator。 https://blog.csdn.net/nishisiyuetian/article/details/81702180
new和malloc的区别
new(这里是new operator)的功能是在堆区新建一个对象,并返回该对象的指针(类型是该对象类型)。new操作符在生成一个对象的时候一般分两步,调用operator new0函数分配内存(有的编译器会在未重载operator new的时候用malloc实现 operator new),然后再用构造函数初始化对象。 所谓的【新建对象】的意思就是,将调用该类的构造函数,因为如果不构造的话,就不能称之为一个对象。同样的,用delete去释放一个堆区的对象,会调用该对象的析构函数。
而malloc只是机械的分配一块内存(类型是void*),如果用mallco在堆区创建一个对象的话,是不会调用构造函数的严格说来用malloc不能算是新建了一个对象,只能说是分配了一块与该类对象匹配的内存而已,与构造函数无关。用free去释放一个堆区的对象,当然不会调用该对象的析构函数。 参考链接:https://www.zhihu.com/question/30115922/answer/46860025 另外new内存分配失败时,会抛出bac_alloc异常,它不会返回NULL;malloc分配内存失败时返回NULL。
|
|