C++只能创建栈对象或堆对象

关键词: C++, 对象

防止某个类创建栈对象(自动对象),只能new堆对象,流程有三:

  1. 将该类的析构函数声明为private。只要看到这样的非抽象类,就意味着只能使用new来创建其堆对象。否则编译器报错。
  2. 类中写一个deleteThis()自杀式函数,其语句为: { delete this; this = nullptr; }
  3. new该类的堆对象之后,如需销毁,则该对象显式调用deleteThis()函数。

防止new堆对象,只能创建栈对象,只需将new和delete运算符声明为private,无须实现(C++语言的一大特性就是支持运算符重载)。


// 声明为 private
void* operator new (size_t );
void operator delete (void* );

使用RAII和作用域锁定/解锁的类最适于这种方式,即:只能使用其栈对象,离开作用域时自动销毁之。

SwingCoder


如果本文对您有所启发或助益,请微信打赏

创作时间: 2011.04.10 11:16
最后修改: 2017.05.10 15:27

本文版权:UnderwaySoft   共享协议:署名-非商业使用-禁止演绎


上一篇: Studio One操作指南
下一篇: C++虚函数表与虚表指针

 随机推荐:
Email: underwaySoft@126.com 微信公众号: UnderwaySoft