条款10:如果写了operator new就要同时写operator delete

来源:互联网 发布:linux查看线程cpu 编辑:程序博客网 时间:2024/05/22 06:24
为什么要自己写operator new和operator  delete,通常是为了效率。

class airplanerep
{
public:
        ...
private:
        airplanerep* rep;
};

  一个airplanerep对象并不大,它只包含一个指针,但当调用operator  new来分配一个airplane对象时,得到的内存可能要比存储这个指针所需要的要多,之所以会产生这种看起来很奇怪的行为,在于operator  new和operator  delete直接需要互相传递信息。operator new必须告诉operator delete当初分配的内存的大小。所以使用缺省的operator new分配的内存如下:

  airplanerep *pa = new airplanerep;

不会得到 pa---->airplanerep对象的内存

而是得到 pa---->内存块大小数据+airplanerep对象的内存

如果自定义operator  new的话,那么就不必在每个分配的内存块上加上附带信息了。
原创粉丝点击