我可能的解决方案是重载new运算符并将其设为私有,以防止您调用new运算符。
但是让我们说即使是新的调用我想在堆栈上分配对象。有可能吗?
答案 0 :(得分:1)
将评论汇总到某种答案:
但是,让我们说即使是新的调用,我希望在堆栈上分配对象。有可能吗?
严格地说,c ++内存模型中没有堆栈的概念,但我们假设你的意思是“禁止动态分配对象”。
简短的回答是“不,不可能阻止它”。即使是使用自定义new
的错综复杂的技巧也无济于事。
虽然这似乎是一个令人沮丧的答案,但这实际上是一件好事。对象的功能是其生命周期和存储位置的单独考虑因素。允许对象指示它的生命周期混合了两个问题并使对象不那么有用。
如果要在堆栈上动态分配对象以增加(或保证)性能,则需要为该作业创建自定义分配器。即自定义分配器可以包含一个内存块,您的类的模型可以在其中就地构建。
Andrei Alexandrescu就此发表了精彩的演讲:https://www.youtube.com/watch?v=LIb3L4vKZ7U