Destructor vs member function race

流过昼夜 提交于 2019-12-07 01:16:44

问题


When I'm inside a destructor is it possible that some other thread will start executing object's member function? How to deal with this situation?


回答1:


C++ has no intrinsic protection against using an object after it's been deleting - forget about race conditions - another thread could use your object after it's been completely deleted.

Either:

  1. Make sure only one place in the code owns the object, and it's responsible for deleting when no-one is using the object.
  2. Make the object reference counted - by added explicit reference counting code, or finding an appropriate base-class that implements reference counting



回答2:


You shouldn't be destroying an object unless you are sure that nothing else will be trying to use it - ideally nothing else has a reference to it. You will need to look more closely at when you call delete.




回答3:


In case are you in a destructor because of stack unwinding in exception handler, I suggest rearranging your code in such a way that you trap exceptions within a serialized block.

After the block you check if the object is still valid and call your method. That way the exception in one thread, will allow other threads to handle call to destructor gracefully.



来源:https://stackoverflow.com/questions/461981/destructor-vs-member-function-race

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!