class Obj1 {
public:
Obj1(int input):input_(input) {
cout << __func__ << endl;
p = new int;
}
~Obj1() {
cout << __func__ << endl;
if (p != NULL) {
delete p;
p = NULL;
}
}
void operator()() {
cout << input_ << endl;
}
private:
int input_;
int* p;
};
int main(int argc, char** argv) {
thread t{Obj1{10}};
t.join();
return 0;
}
这段代码不像我想象的那样工作。为什么 Obj1 的析构函数要被调用 3 次?并且会有腐败,因为双重免费。如何修复此代码?
环境:Ubuntu 10.04.4 LTS,gcc4.7.2