new/delete/malloc/free

发布时间 2023-07-21 10:01:30作者: 小凉拖

new/delete

new和delete是C++中的运算符,不是库函数,不需要库的支持。

new的工作机理

string *sp=new string("a value");//一个new表达式

new表达式调用一个operator new(或者operator new[])的标准库函数,该函数分配一个原始的,足够大小的,未命名的内存空间

编译器运行相应的构造函数以构造这些对象,并进行初始化

返回一个指向该对象的指针

delete的工作机理

delete sp;

将sp所指的对象执行对应的析构函数

然后调用标准库函数operator delete(或者operator delete[])释放掉内存空间

free

free接受一个malloc返回的指针的副本,free将相关内存返回给系统