0
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

4

0 回答 0