当想要确定某一对象不会发生内存泄漏,则可以通过确保该类型的对象不是从堆中分配而来的。嵌入式系统中的堆空间是极为宝贵的。

对象产生于堆中

如果强制要求对象产生于堆中,意味着必须以new的方法产生对象,new之外的方法都必须被禁止。
non-heap的对象的特点是,定义时自动的创建,寿命结束时,自动的析构,所以将那些隐式调用的构造函数和析构动作不合法就可以达到要求了。
让对象产生于堆中的一个好的方法是令析构函数是private的。之后可以通过一个public的假析构函数来调用真的构造函数来完成析构的过程。
尽管我们也可以令构造函数是private,来确保对象产生于堆中,但是这意味这必须确保所有的构造函数都必须是private(默认的构造函数,copy构造函数以及自己所定义的构造函数)

  1. class UPNumber {
  2. public:
  3. UPNumber();
  4. UPNumber(int initValue);
  5. UPNumber(double initValue);
  6. ...
  7. void destory() const {delete this;}//public的假的析构函数
  8. ...
  9. private:
  10. ~UPNumber();
  11. }