placement new
前面我们提到,不可以使用指针直接调用构造函数,这是编译器做的事情。
但如果想在已分配的空间上构造对象,就要使用placement new
具体用法如下:
这时已经new了一块空间,再使用new(buf)就可以在已有的空间上建立对象。
究其实现,其实调用placement new其实与new的步骤几乎无差别。
也分为调用operator_new,类型转换和调用构造函数。
而真正的区别在于重载了operator_new(),使其直接返回这块空间,相当于什么都没做。这样就可以实现直接使用构造函数的功能了。
分配内存的途径
应用程序
根据上述知识,我们在调用new和delete的时候,会调用到operator_new()和operator_delete()
operator_new()和operator_delete()都是可以重载的。
而如果使用全局的operator_new()和operator_delete()方法,一般很少重载(因为会影响全局),按照原生的operator_new()和operator_delete()来调用,那么就会调用到malloc和free
如果是在成员函数中调用op