Więc chciałbym używać inteligentnych wskaźników zamiast surowych i prawie każdy temat na SO mówi o bibliotece Boost. Ale std ma takie rzeczy jak std::auto_ptr
i std::shared_ptr
. Dlaczego zwiększyć? Jaka jest różnica?Jaka jest różnica między inteligentnymi wskaźnikami Boost a standardowymi inteligentnymi wskaźnikami?
Odpowiedz
Zasadniczo Zwiększenie najpierw shared_ptr
. Możesz zauważyć, że wiele nowych klas kontenerowych w C++ 11 było w Boost dawno temu. Spodziewam się, że ten wzorzec będzie kontynuowany także z następnymi wersjami standardu C++. Boost obsługuje starsze kompilatory C++, które nie mówią C++ 11, co jest dużą korzyścią.
Nawiasem mówiąc, std::auto_ptr
jest przestarzałe w C++ 11, co powoduje, że zamiast nich są std::shared_ptr
i std::unique_ptr
, które są znacznie bardziej użyteczne.
Dokładniej: Boost to biblioteka dla autorów do eksplorowania przestrzeni projektowej i sprawdzania poprawności ich bibliotek przez prawdziwych użytkowników.Komitet C++ (w którym jest wielu takich autorów) przychodzi i standaryzuje to, co zadziałało. –
Cóż, std::shared_ptr
i boost:shared_ptr
są zarówno wskaźnikami liczącymi odniesienia. Zamiast tego std :: auto_ptr działa bardzo różnie. Różnica między std::shared_ptr
a boost:shared_ptr
jest bardzo mała i przeważnie historycznie. Przed C++ 11 nie było żadnego std::shared_ptr
i tylko. Kiedy zaprojektowano C++ 11, przyjęli model jako boost:shared_ptr
.
Wszystkie wspomniane inteligentne wskaźniki mają wspólną cechę, że mają własny mechanizm zapewniający prawidłowe zarządzanie punktami za całe życie. auto_ptr
działa tak, że jeśli masz wiele instancji obiektu auto_ptr
, to tylko jeden z nich zawiera wskaźnik do rzeczywistego obiektu. Za każdym razem, gdy utworzysz auto_ptr
z innego auto_ptr
, nowy wskaże obiekt, a stary na NULL
. Z drugiej strony z shared_ptr
może istnieć wiele instancji shared_ptr
, które współużytkują ten sam obiekt, tylko wtedy, gdy ostatni wykracza poza zakres, dopiero wtedy obiekt zostaje usunięty.
W C++ 11 istnieje podobny wskaźnik wpisz std::auto_ptr
, a mianowicie std::unique_ptr
, ale są pewne ważne różnice, zobacz także std::auto_ptr to std::unique_ptr.
Odniesienia:
Patrz również:
std :: auto_ptr jest przestarzała btw –
Nowe inteligentne wskaźniki, jak 'std :: shared_ptr' itd. (Z wyjątkiem' std :: auto_ptr ') w C++ 11 zostały zamodelowane po strukturach o tej samej nazwie w Boost. –
Sprawdź daty wspomnianych pozycji SO. Kilka inteligentnych wskaźników "boost", takich jak 'boost :: shared_ptr', zostało wprowadzonych w standardzie tylko w ubiegłym roku (i tym samym stało się' std :: shared_ptr'). – Gorpik