gpt4 book ai didi

c++ - 为什么 'this' 不是 volatile 的?

转载 作者:塔克拉玛干 更新时间:2023-11-02 23:56:50 25 4
gpt4 key购买 nike

在过去的几天里调试了一个多线程,其中一个线程正在删除一个仍在被另一个线程使用的对象,我意识到如果我可以让“this”变得易变,那么诊断这个问题会容易得多,也快得多。它会将系统 (Symbian OS) 上的故障转储更改为包含更多信息的内容。

那么,有什么理由不能或不应该这样吗?

编辑:所以确实没有安全的方法来防止或检查这种情况。如果说访问陈旧类指针的一种解决方案是拥有一个保存指针的全局变量,并且任何被调用的函数都应该是使用全局变量替代“this”的静态函数,这是否正确?

static TAny* gGlobalPointer = NULL;

#define Harness static_cast<CSomeClass*>(gGlobalPointer);

class CSomeClass : public CBase
{
public:
static void DoSomething();

private:
int iMember;
};


void CSomeClass::DoSomething()
{
if (!Harness)
{
return;
}

Harness->iMember = 0;
}

因此,如果另一个线程删除了全局指针并将其置为 NULL,它将立即被捕获。

我认为与此相关的一个问题是,如果编译器缓存了 Harness 的值,而不是在每次使用它时都检查它。

最佳答案

this 不是变量,而是常量。您可以更改 this 引用的对象,但不能更改 this 的值。因为常量永远不会改变,所以没有必要将它们标记为易变的。

关于c++ - 为什么 'this' 不是 volatile 的?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6546412/

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