【发布时间】:2014-07-06 19:08:51
【问题描述】:
我想知道 RAII 是否总是在堆栈上分配,或者编译器是否曾经将堆用于大对象(然后可能会在堆栈中添加一个标记,以提醒何时销毁相应的堆分配对象)?
更新:显然这个问题被认为是不清楚的。也许一个代码示例会使这一点更清楚:
在这段代码中:
void dosomething() {
MyClass myclass();
}
假设编译器没有优化掉这样一个微不足道的例子,那么由此创建的 MyClass 实例是否总是在堆栈上分配,或者是否曾经使用过堆?
我想我现在明白了答案,这要归功于接受的答案——答案似乎是类实例本身进入堆栈,而其内容可能会或可能不会取决于其构造函数的定义方式。如果这不正确,请添加评论/答案。
【问题讨论】:
-
RAII 和“堆栈”分配是完全正交的概念。
-
堆栈分配就是堆栈分配,这就是重点。期间。
-
那么RAII在哪里分配呢?用户可以指定吗?
-
你应该阅读动态和自动分配,
RAII不会干扰这两个概念,你走错了路。 -
@Magnus RAII 不分配任何地方。它与对象生命周期开始和结束时发生的事情有关,无论它在哪里分配。