2013-08-16 17 views
15

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 podstawowa deallocator.
  • std :: weak_ptr: Podtyp std::shared_ptr, który nie zwiększa liczby odwołań i jest unieważniany, gdy jego rodzic std::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?

+2

Nie rozumiem, o co pytasz. Jak zaimplementować inteligentne zachowanie wskaźnika za pomocą surowych wskaźników? –

+1

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

+0

@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

Odpowiedz

4

jaki idiom ma zastąpić każdy inteligentny wskaźnik?

Każdy z nich, kiedykolwiek, który ostatecznie wymagał zniszczenia wskazanego zasobu. Innymi słowy, praktycznie wszystkie z nich. Nie potrafię wymyślić żadnych idiomów zawierających surowe wskazówki, które nie obejmowałyby niszczenia wskazanego źródła. Każde inne użycie nie jest tak naprawdę idiomem, to po prostu "Używanie wskaźnika".

+0

Zbiorcze pojemniki nie niszczą wskazanych zasobów, po prostu usuwają je z listy. To jest główny problem, który miałem podczas badania inteligentnych wskaźników, który sprytny wskaźnik byłby potencjalnym kandydatem do takiego użycia? – Casey

+0

@Casey: Jeśli nie zniszczą swoich wskazanych zasobów, dlaczego w ogóle używają inteligentnego wskaźnika? Inteligentne wskaźniki służą do niszczenia rzeczy. – Puppy

+0

OK, właśnie dlatego byłem zdezorientowany. Każda osoba, która opowiadała się za inteligentnymi wskazówkami, które czytałem gwałtownie, sprzeciwiała się użyciu surowych wskaźników w jakiejkolwiek formie i modzie i powinna zostać zastąpiona inteligentnym wskaźnikiem. – Casey

Powiązane problemy