【发布时间】:2014-08-08 13:06:34
【问题描述】:
我有一个带有简单线程指针的类,我用它在我的构造函数的新线程中启动一个函数。
class Tty {
public:
Tty();
private:
void foo();
std::thread tFoo;
};
using namespace std;
Tty::Tty() {
tFoo = thread(&Tty::foo, this);
}
void Tty::foo() {
cout << "test";
}
我的主要可以恢复到那个:
int main(int argc, char** argv) {
Tty* tty = new Tty();
while (!exitCheck());
}
但是当我运行这段代码时,我在运行时收到了这个错误:malloc(): memory corruption: 0x000000000133c170。
我做错了什么?
【问题讨论】:
-
您的示例不需要使用任何指针。另请注意,您可能会使用 using 指令将
std::exit函数带入全局命名空间(或者它可能已经存在)。 -
有趣的是,您可以运行此代码。它不适合我。
-
那我如何在没有指针的情况下保持线程?
-
@LoveMetal,我不确定你所说的“保持”是什么意思。您可以使用构造函数初始化程序列表或非静态数据成员初始化程序对其进行初始化。它由您的对象“保留”,直到它消失(如果
main只使用常规对象,则它所在的范围结束)。 -
Look, mom. no pointers。你可能会发现
join()也很有趣。
标签: c++ multithreading stdthread