有一个指向此的静态指针会产生什么后果

What are the consequences of having a static pointer to this

本文关键字:什么 后果 指针 静态 有一个      更新时间:2023-10-16

我有一个类,它包含需要作为线程运行的函数。实现这一点的正确方法(根据我的理解)是将这些函数声明为静态函数。要使用这个类中的方法,我需要有一个该类的实例,所以我在构造函数中创建一个初始化为self的静态变量。效率和程序逻辑的含义是什么?

class Foo
{
   private: Foo* this_instance;
   Foo()
   {
      this_instance=this;
   }
   void FooBar()
   {
   ...
   }
   static void* Bar()
   {
   if (this_instance==NULL) return 1; //throws are not catched are they?
   this_instance->FooBar();
   return 0;
   }
}

不是实际的代码,而是为了让我的问题更清楚。

该应用程序实际上是有效的,我用helgrind/memcheck进行了检查,错误与手头的问题无关。我问这个问题是因为所有的解决方案都像是变通办法,包括这个。另一些则像爱医生所说的,另一些则使用静态辅助方法。

我想知道我的方法是否会在某个时间点导致巨大的失败,原因对我来说是未知的,对其他更有经验的程序员来说是显而易见的。

您不需要函数是静态的就可以在线程中使用它们。您可以绑定实例函数或传递this指针,或者使用带有lambda的C++11。
如果使用原始线程,则必须捕获线程中的异常——它们不会传播到启动线程的代码。
在C++11中,可以使用current_exceptionrethrow_exception传播异常。请参阅此处


编辑

如果每个类型都有一个静态指针,那么只能有它的一个实例,但代码不会阻止静态指针被重置。为什么一开始就麻烦拥有一个类实例——当然只是传入参数?我认为有免费的功能来做这项工作更清洁。如果你认为这不值得付出努力,那就是你的代码。你的同事对你的设计有什么看法?