gpt4 book ai didi

C++ 对象生命周期优化

转载 作者:塔克拉玛干 更新时间:2023-11-03 01:55:31 24 4
gpt4 key购买 nike

我正在尝试使用 RAII 创建对象,这些对象作用于流直到它们被销毁。例如,我有一个流,它在添加 endl 时自行刷新。大多数时候我想要这个,但并非总是如此。我希望能够说“不要在 endl 上刷新”,但我也需要它是异常安全的。所以我不能只执行 stream->NoFlush() 来设置类成员。不管怎样,我想知道的是这个。如果我有这样的代码

CStreamModifier no_flush;
stream->NoFlush(no_flush);
// as long as no_flush is in scope I get the behaviour I want

... do some stuff on the stream, without referencing no_flush ...

// no_flush goes out of scope here.

是否允许编译器优化 no_flush 的生命周期?例如,它在第 2 行之后没有使用,但我需要它一直保留到最后。我还没有真正听说过任何像这样的优化,所以我认为我没问题,但我想确定一下。

最佳答案

不,不允许编译器优化它。当对象超出范围时,将准确调用析构函数。

如果 NoFlush 按值获取参数,它可以做的是优化它的拷贝,但这无关紧要。

复制省略是编译器可以执行的影响可观察行为的唯一优化。

关于C++ 对象生命周期优化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13617504/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com