Item 34. Restricting Heap Allocation

Item 34. Restricting Heap Allocation

1、什么情况下要限制堆分配?
假如一个句柄对象("handle" object )维护了一个体对象("body" object)的引用数量,就需要确保对象的析构函数调用。局部对象和静态对象能够自动调用其析构函数,而堆分配的对象需要显式地调用析构函数。这样确保这个特殊类的对象不能进行堆分配是个不错的注意。

2、如何限制堆分配?
class NoHeap {
  public:
    //...
  protected:
    void *operator new( size_t ) { return 0; }
    void operator delete( void * ) {}
  private:
    void *operator new[]( size_t );
    void operator delete[]( void * );
};

3、如何限制栈分配?

class OnHeap {
   ~OnHeap();
  public:
    void destroy()
        { delete this; }
    //...
};

原文地址:https://www.cnblogs.com/aiwz/p/6333216.html