【发布时间】:2011-01-29 07:21:03
【问题描述】:
大多数时候,我都是这样做的。
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;
}
不过,我在这里看到一篇文章:
抛弃 volatile 允许访问 通过非易失性对象 参考。这可能导致 未定义的,也许是无意的 程序行为。
那么,我上面的代码示例的解决方法是什么?
这是我使用时收到的错误消息
删除 j
请注意,这是 VC6 的输出(不要问我为什么使用 VC6!)
c:\projects\a\a.cpp(5):错误 C2664: 'delete' : 无法转换参数 1 从 'volatile int *' 到 'void *' 转换失去限定符
【问题讨论】:
-
为什么你认为它应该是易变的?
-
@Richard:自旋锁标志可以分配在普通内存中,但它是易失的。没那么疯狂。
-
我不明白为什么
delete j;会是编译时错误。
标签: c++