2013-02-20 17 views
5

Mam strukturę, która zarządza obiektami, które pochodzą z klasy podstawowej Entity, ale nie kontroluje ich życia. Chcę, aby ta struktura miała słabe wskaźniki, takie jak weak_ptr<Entity>, aby mogła wiedzieć, czy obiekt został zniszczony w innym miejscu.weak_ptr z klasy bazowej, podczas gdy shared_ptr jest klasy pochodnej?

Jednak poza strukturą zarządzania, w której znajduje się współużytkowany wskaźnik, chcę, aby współdzielony wskaźnik był bardziej szczegółowy: shared_ptr<SpecificEntity> (SpecificEntity używa Entity jako klasy bazowej).

Czy istnieje sposób, aby to osiągnąć, lub coś podobnego?

Odpowiedz

11

To bardzo możliwe. Zawsze można konwertować domyślnie shared_ptr<Derived> na shared_ptr<Base>, a dla innego kierunku masz std::static_pointer_cast i std::dynamic_pointer_cast, które robią to, czego oczekujesz od –, tzn. Otrzymujesz nowy wskaźnik innego typu, który dzieli własność z oryginalnym wskaźnikiem. Przykład:

std::shared_ptr<Base> p(new Derived); 

std::shared_ptr<Derived> q = std::static_pointer_cast<Derived>(p); 

std::shared_ptr<Base> r = q; 

Albo, bardziej C++ 11-style:

auto p0 = std::make_shared<Derived>(); 

std::shared_ptr<Base> p = p0; 

auto q = std::static_pointer_cast<Derived>(p); 
+0

Ach, ja nie wiem, że były rzuty za to! Dziękuję Ci! –

Powiązane problemy