大多数时候,我这样做.
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;
}
Run Code Online (Sandbox Code Playgroud)
但是,我在这里看到一篇文章:
抛弃volatile允许通过非易失性引用访问对象.这可能导致未定义的,也许是非预期的程序行为.
那么,上面代码示例的解决方法是什么?
以下是我使用时收到的错误消息
删除j
注意,这是从VC6输出的(不要问我为什么使用VC6!)
c:\ projects\a\a.cpp(5):错误C2664:'delete':无法将参数1从'volatile int*'转换为'void*'转换失去限定符
没有什么。如果不访问易失性内存,则易失性的语义不受影响。如果您通过强制转换的非易失性指针访问易失性内存,编译器可能会优化引用。如果该值发生了变化,您就会得到错误的值。对于某些值的错误。;-)
删除不会访问易失性内存,它只是释放它。对于易失性存储器来说,这是一件不常见的事情。
| 归档时间: |
|
| 查看次数: |
5244 次 |
| 最近记录: |