在编译器优化方面,将堆分配更改为栈分配是否合法或可行?或者这会违反as-if rule规定?
例如,假设以下是原始代码的版本
{
Foo* f = new Foo();
f->do_something();
delete f;
}
编译器能把这个改成下面的形式吗?
{
Foo f{};
f.do_something();
}
我不这么认为,因为如果原始版本依赖于诸如自定义分配器之类的东西,那么这将产生影响。标准是否对此有具体说明?
我认为不会,因为这可能会对使用自定义分配器等内容的原始版本产生影响。标准对此有明确规定吗?