本文介绍: operator new和operator delete是系统提供的全局函数,new在底层调用了operator new函数来开辟空间,delete在底层调用operator delete函数来实现释放空间。由于c++兼容c,因此c的内存管理方式在c++中依旧可以使用,但其不能解决自定义类型的初始化问题,new在为一个自定义类型开辟空间时会调用其构造函数进行初始化,delete在释放自定义类型的空间时也会调用其析构函数来对其内容进行清理。1.malloc和free是函数,new和delete是操作符。
c++内存分布
const修饰的变量并不会因为其具有常属性而将其放到常量区,const起的作用只是将其修饰成不可修改而已。
new和delete
类似于C语言malloc和free,c++提出了自己的内存管理方式。
需要注意的是,为了避免一些意想不到的错误,new和delete配套使用,new[]和delete[]配套使用,不能混合使用。
由于c++兼容c,因此c的内存管理方式在c++中依旧可以使用,但其不能解决自定义类型的初始化问题,new在为一个自定义类型开辟空间时会调用其构造函数进行初始化,delete在释放自定义类型的空间时也会调用其析构函数来对其内容进行清理。
operator new和operator delete
operator new和operator delete是系统提供的全局函数,new在底层调用了operator new函数来开辟空间,delete在底层调用operator delete函数来实现释放空间。这2个函数用户可以直接使用,但其目的不是为了供用户使用,而是用于new和delete。
operator new的空间申请其实是通过malloc函数实现的,operator delete空间的释放也其实是通过free函数实现的。这样层层封装的主要原因是malloc函数开辟空间失败后会返回0,不符合c++面向对象编程,我们希望空间开辟失败后会抛异常,因此我们就在malloc函数的基础上,加上了一个空间开辟失败抛异常的功能,然后将其封装成operator new函数。operator delete和free没有什么区别,其主要是为了和operator new函数对称。
new和delete实现原理
mallloc/free与new/delete区别
声明:本站所有文章,如无特殊说明或标注,均为本站原创发布。任何个人或组织,在未征得本站同意时,禁止复制、盗用、采集、发布本站内容到任何网站、书籍等各类媒体平台。如若本站内容侵犯了原著者的合法权益,可联系我们进行处理。