Jakie są równoważne zastosowania każdego inteligentnego wskaźnika w porównaniu do podobnych (ale nie tylko) niektórych zaawansowanych technik wykorzystujących surowe wskaźniki ?std :: unique_ptr vs std :: shared_ptr vs std :: weak_ptr vs std :: auto_ptr vs surowe wskaźniki
Moje rozumienie jest minimalna, ale z tego co mogę zebrania:
- Raw wskazówek: używać tylko jeśli naprawdę, naprawdę, naprawdę, naprawdę, wiemy co robisz i starannie ukryte wykorzystanie tyłu interfejs.
- std :: auto_ptr: Przestarzałe nigdy nie używać.
- std :: unique_ptr: Wskaźnik Singleton, który przenosi własność po przypisaniu.
- std :: shared_ptr: Wskaźnik odniesienia zliczony, który nie przenosi własności po przydziale, lecz zwiększa jego licznik odwołań. Kiedy wszystkie odniesienia opuszczają zakres lub jawnie są
std::shared_ptr::reset
, wywoływana jest podstawowadeallocator
. - std :: weak_ptr: Podtyp
std::shared_ptr
, który nie zwiększa liczby odwołań i jest unieważniany, gdy jego rodzicstd::shared_ptr
już nie istnieje. Może zwrócić i nieprawidłowe odwołanie. Zawsze sprawdzaj przed użyciem.
RAW POINTER RÓWNOWAŻNE PRZYKŁADY
liczenia odniesienia, implementacje cache:std::map<std::string, std::pair<long, BITMAP*> > _cache;
singletons z przeniesienia własności:
class Keyboard {
public:
//...
static Keyboard* CreateKeyboard();
~Keyboard();
//...
private:
//...
Keyboard();
static Keyboard* _instance;
//...
};
Kruszywo Con Niska wydajność, brak własności: przestrzenne wykresy partycjonowania i drzewa, iteracyjne kontenery itp
Composite Kontenery, Własność: dużych obiektów.
--EDIT--
Jak pracuję natknąłem ciekawym przypadku DeadMG wskazał, że inteligentne wskaźniki mają być wykorzystane jako łatwych abstrakcji dbać o zarządzanie zasobami; co z obiektami zakresu plików, które nie mogą zostać utworzone na stercie w miejscu deklaracji, ale zamiast tego muszą zostać utworzone później?
Nie rozumiem, o co pytasz. Jak zaimplementować inteligentne zachowanie wskaźnika za pomocą surowych wskaźników? –
Nie mam pojęcia, co to jest, ale jeśli nazywasz 'unique_ptr' wskaźnikiem Singleton, podejrzewam, że masz tutaj zupełnie inne znaczenie Singleton. – Puppy
@NeilKirk Dokładnie przeciwnie, jakie są zastosowania inteligentnych wskaźników w porównaniu do surowych wskaźników? tj. jaki idiom ma zastąpić każdy inteligentny wskaźnik? – Casey