有一个指向此的静态指针会产生什么后果
What are the consequences of having a static pointer to this
我有一个类,它包含需要作为线程运行的函数。实现这一点的正确方法(根据我的理解)是将这些函数声明为静态函数。要使用这个类中的方法,我需要有一个该类的实例,所以我在构造函数中创建一个初始化为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_exception
和rethrow_exception
传播异常。请参阅此处
编辑
如果每个类型都有一个静态指针,那么只能有它的一个实例,但代码不会阻止静态指针被重置。为什么一开始就麻烦拥有一个类实例——当然只是传入参数?我认为有免费的功能来做这项工作更清洁。如果你认为这不值得付出努力,那就是你的代码。你的同事对你的设计有什么看法?
相关文章:
- 为不同配置设置MSVC_RUNTIME_LIBRARY的正确方法是什么
- 警告处理为错误这里有什么问题
- 什么时候调用组成单元对象的析构函数
- #定义c-预处理器常量..我做错了什么
- 努力将整数转换为链表。不知道我在这里做错了什么
- C++我的数学有什么问题,为什么我的代码不能正确循环
- 使用 nullptr 作为 std::unordered_map 的键有什么后果吗?
- 在C++中使用异常的可能的错误处理策略是什么,它们的后果和影响是什么
- 我什么时候应该使用删除?(在动态创建的2D数组之后未删除的后果)
- C 指针初始化的不良初始化可能是什么后果
- 内存泄漏的长期后果是什么?
- 不调用libusb_exit()会产生什么后果
- 强制QObject作为QWidget的父级的后果是什么?
- 有一个指向此的静态指针会产生什么后果
- 在c++ 0x中忽略窄化转换的后果是什么?
- c++ fprintf函数调用中格式/参数类型不匹配的可能后果是什么?
- 父类有虚方法而派生类没有虚方法的后果是什么?
- "screwing up"赋值运算符的后果是什么?
- 在VisualStudio2010中混合使用异常处理模型会产生什么后果
- 在条件语句中简单检查指针值的后果是什么?