gpt4 book ai didi

c++ - 丢弃 volatile 安全吗?

转载 作者:可可西里 更新时间:2023-11-01 17:43:36 31 4
gpt4 key购买 nike

大多数时候,我都是这样做的。

class a {
public:
~ a() {
i = 100; // OK
delete (int *)j; // Compiler happy. But, is it safe?
// The following code will lead compilation error : delete j;
}

private:
volatile int i;
volatile int *j;
};

int main() {
a aa;

}

然而,我在这里看到一篇文章:

https://www.securecoding.cert.org/confluence/display/seccode/EXP32-C.+Do+not+access+a+volatile+object+through+a+non-volatile+reference

Casting away volatile allows access to an object through a non-volatile reference. This can result in undefined and perhaps unintended program behavior.

那么,我上面的代码示例的解决方法是什么?

这是我使用时得到的错误信息

delete j

注意,这是VC6的输出(不要问我为什么用VC6!)

c:\projects\a\a.cpp(5) : error C2664: 'delete' : cannot convert parameter 1 from 'volatile int *' to 'void *' Conversion loses qualifiers

最佳答案

没有。如果您不访问 volatile 内存,则 volatile 的语义不受影响。如果您通过强制转换的非 volatile 指针访问 volatile 内存,编译器可能会优化引用。如果该值已更改,您将得到错误的值。对于一些错误的值(value)。 ;-)

删除不访问 volatile 内存,它只是释放它。与 volatile 内存有关的事情有点不常见。

关于c++ - 丢弃 volatile 安全吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2474756/

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