将引用计数对象发送到其他线程时,在启动线程之前或在线程内增加计数是否更好的经验法则?
从更一般的意义上讲,我(作为一个函数)是否应该假设传递给我的参数已经考虑过了?
答案 0 :(得分:4)
在传递对象的新线程中增加计数几乎肯定是错误的。 “父”线程中的任意数量的代码可以在新的“子”线程完全运行之前运行,在这种情况下,“父”中的函数可能会返回,执行其他一些操作,将引用计数减少为0 ,并释放对象。然后,新线程将触及无效内存,调用未定义的行为,并且所有地狱都会失败。
进一步注意,这些错误很可能在很长一段时间内未被发现,因为新线程不能立即运行在统计上是不寻常的。事实上,可能是您的客户/客户首先看到错误......: - )