Chciałbym zawinąć surowy wskaźnik do jakiegoś inteligentnego wskaźnika, aby zapobiec usunięciu wewnątrz klasy wywołującej. Właściciel obiektu pod wskaźnikiem znajduje się poza klasą. Wygląda na to, że nie pasuje boost::shared_ptr
i std::auto_ptr
. Poniżej znajduje się przykład obniżona:Tworzenie weak_ptr <> z surowego wskaźnika
class Foo {
boost::weak_ptr<Bar> m_bar;
public:
void setBar(const Bar *bar) { // bar created on heap
m_bar = bar; // naturally compilation error
}
};
oczywiście, wywołuje błąd kompilacji. Jaki jest poprawny sposób inicjowania weak_ptr
z nieprzetworzonego wskaźnika (jeśli istnieje)?
możliwy duplikat [Shared \ _ptr & słabego \ _ptr konwersje] (http://stackoverflow.com/questions/17522020/shared-ptr-weak-ptr-conversions) –
Jeśli chcesz zapobiec usunięciu tego wskaźnika w klasie, nie wywołuj na nim 'delete', a nie udostępniaj funkcji akcesora, które eksponują wskaźnik na klientach. 'weak_ptr' jest przeznaczone do widoku nie będącego właścicielem obiektu posiadanego przez' shared_ptr'. Gdybyś był w stanie jakoś wsadzić ten wskaźnik w 'weak_ptr', nie miałby pojęcia, czy wskaźnik wygasł, ani też nie uniemożliwi mi wywołania' delete m_bar.lock(). Get(); 'w twojej klasie. Nigdy nie da się uczynić wszystkiego w 100% bez idioty. – Praetorian