【问题标题】:How to enforce that classes's instances only be allocated on the stack, but not on the heap [duplicate]如何强制只在堆栈上分配类的实例,而不是在堆上[重复]
【发布时间】:2011-08-27 03:56:10
【问题描述】:

可能重复:
How do I prevent a class from being allocated via the 'new' operator? (I'd like to ensure my RAII class is always allocated on the stack.)

对于 C++,如何强制只分配类的实例 在编译时在堆栈上,而不是在堆上?

我认为所有数据成员和函数都分配在堆栈中,除非 它们由 new 运算符声明。

对吗?

非常感谢任何帮助。

【问题讨论】:

标签: c++


【解决方案1】:

声明但不定义该类的自定义新建/删除。

【讨论】:

  • 如果你有 C++11,operator new(whatever) = delete 也能工作吗?还有很酷的技巧,+1。
  • @Seth:我不知道。如果合法,那么我希望它会达到同样的效果。
  • 这也适用于新展示位置吗?
  • @Seth,如果某人真的在尝试,你无法阻止他们在堆上进行分配。例如,他们可以将其包装在容器类中并在堆上分配该类
  • @bdonlan 这不是重点。如果 new 被隐藏(为什么还要这样做?),placement new 也将被隐藏,并且 malloc 单独没有placement new 将仅适用于 POD(他们用 c++0x 重命名了那些,我只是忘记了如何)
猜你喜欢
  • 2021-04-01
  • 2019-07-27
  • 2010-12-05
  • 2015-04-15
  • 1970-01-01
  • 1970-01-01
  • 2011-02-18
  • 2012-09-12
  • 2014-05-13
相关资源
最近更新 更多