我目前正在研究最流行的智能 Ptr 实现,例如提升共享指针和弱指针以及 loki智能和强指针,因为我想实现自己的,据我所知,Loki 强指针对我来说看起来不安全,但我宁愿认为我理解错了,所以我想讨论一下它是否安全。我认为它不安全的原因是,据我所知,它没有足够小心地对待弱指针(即 StrongPtr,其中 false 表示其弱):
例如取消引用功能:
PointerType operator -> ()
{
KP::OnDereference( GetPointer() ); //this only asserts by default as far as i know
//could be invalidated right here
return GetPointer();
}
在多线程环境中,弱指针可能随时失效,因此该函数可能会返回一个失效的 Ptr。
据我了解,您要么必须创建要取消引用的 ptr 的 strongPtr 实例,以确保它不会在中途失效。我认为这也是 boost 不允许您在不先创建 shared_ptr 实例的情况下取消引用 weak_ptr 的原因。我认为 Lokis StrongPtr 构造函数遇到了同样的问题。
这是一个问题还是我读错了 src?