在回答另一个问题时,我突然想到我可能会优化我自己的一些旧代码,这些代码有错误......“不是最佳”生命周期管理。
我至少有一个应用程序,其中对象的访问/生命周期由 shared_ptr 控制。这个ptr是动态分配的,因此它可以“原子地”换出另一个*shared_ptr,(因此是一个由新ptr管理的更新对象),没有任何锁定。这似乎工作正常,但我故意泄漏旧的 ptr,因为我不知道最后一个线程何时完成。
现在我突然想到,我可以(也许)删除()正在管理的旧对象的 dtor 中的旧 *shared_ptr。我会在创建时将 *sharedPtr 加载到托管对象的私有数据成员中,以便 dtor 可以将其删除。
有没有人这样做过,或者对为什么它可能不安全有任何看法?我可以尝试一下,但我担心,就像许多多线程“优化”一样,它可能只是“看起来有效”,直到我交付它之后:(