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ż:
- 1. Pierwsze kroki z inteligentnymi wskaźnikami w C++
- 2. Dodaj element do pojemnika z inteligentnymi wskaźnikami
- 3. Jakie są zasady konwersji między różnymi inteligentnymi wskaźnikami w C++
- 4. Jaka jest różnica między dalekimi wskazówkami a bliskimi wskaźnikami?
- 5. Różnica między wskaźnikami i adresami
- 6. Jaka jest różnica między Boost :: bind a Boost Phoenix :: bind?
- 7. Problemy ze wskaźnikami i wskaźnikami do wskaźników
- 8. Jaka jest różnica między wskaźnikami LP_ * i * _p w ctypach? (i dziwna interakcja ze strukturami)
- 9. Jaka jest różnica między standardowymi implementacjami biblioteki w C++?
- 10. Jaka jest różnica między delegatami C#, dynamicznym proxy, zamknięciami i wskaźnikami funkcji?
- 11. Kopiuj konstruktora ze wskaźnikami
- 12. Oblicz odległość między dwoma surowymi wskaźnikami
- 13. ctypes i manipulacja wskaźnikami
- 14. Jak działają operatory ze wskaźnikami?
- 15. Jaka jest różnica między "całkowitym zasięgiem" a "zasięgiem kodu" w rcov?
- 16. Pasek postępu z 2 wskaźnikami
- 17. Jaka jest różnica między cat_id a term_id?
- 18. Jaka jest różnica między IEnumerable a tablicami?
- 19. Jaka jest różnica między == a === w Verilog?
- 20. Jaka jest różnica między UseCase a Workflow?
- 21. Jaka jest różnica między pakietem a intencją?
- 22. Jaka jest różnica między węzłem a wierzchołkiem?
- 23. Jaka jest różnica między Ember.computed.alias a Ember.binding?
- 24. Jaka jest różnica między alertem a window.alert?
- 25. Jaka jest różnica między @android a android:
- 26. Jaka jest różnica między krotką a kompresją?
- 27. Jaka jest różnica między proxy a reify?
- 28. Jaka jest różnica między @Inject a @PersistenceContext?
- 29. Jaka jest różnica między sqlite3 a pdo_sqlite
- 30. Jaka jest różnica między Const a Constant?
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