定制自己的new和delete:operator new 和 operator delete

new和delete不同用法


基本用法

int * aptr = new int(10);
delete aptr, aptr = nullptr;

上面的代码是我们最基本也是最常见的使用new和delete的方式,当编译器运行int * aptr = new int(10); 这行代码时,其实是分为两个步骤来执行,第一步,调用operator new(size_t size) 分配内存;第二步在分配的内存上调用placement new(void * ptr) T(); “定位放置 new”,就是把对象构建在指定的ptr指向的内存上,换句话就是在指定的内存上调用构造函数。

概念区分

new operator 和 delete operator :new 和 delete 操作符(关键字),无法重载
operator new 和 operator delete:两个函数用来服务于 new 和 delete 操作符,以及对应的 operator new [] , operator delete [] 对应于 new [] 和 delete []相关的数组操作;这两个函数是可以被重载的,一般有全局默认的函数,自己也可以定义自己的,在定义C++类的时候也可以为某个class定制对应的 operator new 和 operator delete

全局的operator new 和 operator delete函数

全局默认operator new 函数:

void * operator new(std::size_t count) 
        		

网友评论