2012-11-07 9 views
9

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?

+0

std :: auto_ptr jest przestarzała btw –

+0

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. –

+0

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

Odpowiedz

17

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.

+3

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. –

4

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:

Powiązane problemy