有一个静态指针的后果是什么

时间:2013-07-31 09:11:45

标签: c++ multithreading pthreads static-members

我有一个包含需要作为线程运行的函数的类。执行此操作的正确方法(从我理解的形式)将这些函数声明为static。要使用此类中的方法,我需要一个实例来创建该类,因此我创建了一个在构造函数中初始化为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检查它,错误与手头的问题无关。我问这个问题,因为所有解决方案看起来都是解决方法,包括这个。其他人就像医生爱提到的那个,其他使用辅助静态方法。

我想知道我的方法是否会在某个时间点导致史诗般的失败,因为某些原因我不知道,对其他更有经验的程序员来说也很明显。

1 个答案:

答案 0 :(得分:0)

在线程中使用它们不需要静态函数。您可以绑定实例函数或传递this指针,或者将C ++ 11与lambda一起使用。
如果使用原始线程,则必须捕获线程中的异常 - 它们不会传播到启动线程的代码。
在C ++ 11中,您可以使用current_exceptionrethrow_exception传播异常。见here


修改

如果每个类型都有一个静态指针,则只能有一个实例,但是代码不会阻止静态指针被重置。为什么首先要打扰一个类实例 - 当然只是传入参数?我认为拥有免费功能来完成这项工作更加清晰。如果您认为这不值得,那就是您的代码。你的同事对你的设计有什么看法?