析构函数与成员函数竞争

jac*_*hab 7 c++ multithreading destructor

当我在析构函数内部时,其他一些线程可能会开始执行对象的成员函数吗?如何应对这种情况?

Dou*_*der 17

C++没有内部保护来防止在删除对象后使用它 - 忘记竞争条件 - 另一个线程可以在完全删除后使用你的对象.

或者:

  1. 确保代码中只有一个位置拥有该对象,并且当没有人使用该对象时,它负责删除.
  2. 通过添加显式引用计数代码或查找实现引用计数的适当基类来对对象引用进行计数


DJC*_*rth 15

你不应该破坏一个对象,除非你确定没有别的东西会试图使用它 - 理想情况下没有别的东西可以引用它.当您调用delete时,您需要更仔细地查看.