Pracuję z wykorzystaniem bazy kodowej, która została częściowo zaimplementowana przez kogoś, kto był zakochany w zbyt złożonych rozwiązaniach prostych problemów (np. Klas szablonów z dwoma parametrami, które były tworzone tylko dla jednej pary typów). Jedną z rzeczy, które robiła, było tworzenie obiektów w inteligentnym wskaźniku, a następnie przechowywanie obiektu w słabym wskaźniku.Przechowuj słabe wskaźniki do siebie
class MyClass {
//...
boost::weak_ptr<MyClass> m_self;
//...
};
boost::shared_ptr<MyClass>
Factory::Factory::Factory::CreateMyClass() {
boost::shared_ptr<MyClass> obj(new MyClass(...));
boost::weak_ptr<MyClass> p(obj);
obj->storeSelfPointer(p);
return obj;
}
Ta klasa kontynuuje używanie m_self, blokując ją i przekazując wynikowy współdzielony wskaźnik.
Za życie mnie nie mogę pojąć, co ona próbowała osiągnąć. Czy istnieje jakiś wzorzec lub idea, które wyjaśniałyby tę implementację? Wydaje mi się, że to zupełnie bezcelowe i chciałbym to odrzucić.
EDYTOWANIE: Powinienem wspomnieć, że żadne z miejsc, które używają wynikowego inteligentnego wskaźnika uzyskanego z blokowania m_self w rzeczywistości nie zachowuje inteligentnego wskaźnika.
nie wiedział o 'std :: shared_from_this' Chyba –
Jest C++ 98, nowsze rzeczy nie jest używany –
No ok, to C++ 98 wersja' enable_shared_from_this' –