В настоящее время я смотрю на наиболее популярные реализации интеллектуальных Ptr, такие как повышение общих и слабых указателей, а также loki Умный и сильный указатель , поскольку я хочу реализовать свою собственную и, насколько я понимаю, выглядит указатель Loki Strongнебезопасно для меня, но я скорее думаю, что я понимаю это неправильно, поэтому я хотел бы обсудить, безопасно это или нет.Причина, по которой я думаю, что это небезопасно, заключается в том, что, насколько я могу судить, он не обрабатывает слабые указатели (то есть 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.
Насколько я понимаю, вам придется либосоздайте экземпляр strongPtr для ptr, который вы разыменовываете, чтобы гарантировать, что он не станет недействительным на полпути.Я думаю, что это также причина, по которой boost не позволяет разыменовать слабый_птр без предварительного создания экземпляра shared_ptr.Я думаю, что Lokis StrongPtr Constructor страдает той же проблемой.
Это проблема или я неправильно читаю src?