Auto ptr: Różnice pomiędzy wersjami

[wersja przejrzana][wersja przejrzana]
Usunięta treść Dodana treść
Linia 1:
{{małą literą|auto_ptr}}
'''auto_ptr''' to [[Szablon klasy|wzorzec klasy]] [[sprytny wskaźnik|sprytnego wskaźnika]] dostępny w [[biblioteka standardowa C++|bibliotece standardowej C++]] (zadeklarowany w nagłówku <memory>) udostępniający podstawową funkcjonalność [[Resource Acquisition Is Initialization|RAII]] dla zwykłych surowych [[wskaźnikZmienna wskaźnikowa|wskaźników]]ów.
 
Wzorzec klasy auto_ptr opisuje obiekt przechowujący wskaźnik do zaalokowanego obiektu typu Typ*, dbając o to żeby obiekt na który ten wskaźnik wskazuje został automatycznie zniszczony wraz ze zniszczeniem wskaźnika − czyli zazwyczaj po opuszczeniu zasięgu.
 
W większości sytuacji preferowany zamiast auto_ptr jest wzorzec [[shared_ptrshared ptr]] proponowany w [[Technical Report 1]] i dostępny w bibliotece [[Boost]], a także zgodnie ze standardem [[C++11|C++0x]] - w bibliotece standardowej C++ . Wersja robocza standardu C++0x, z sierpnia 2010, odradza korzystanie z auto_ptr, zalecając zastępowanie go nowym w bibliotece standardowej szablonem [[unique_ptrunique ptr]]<ref>{{Cytuj stronę | url = http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2010/n3126.pdf | tytuł = Working Draft, Standard for Programming Language C++ N3092 | data dostępu = 30 września 2010 | data = 21 sierpnia 2010}}</ref><ref>{{Cytuj stronę | url = http://www.informit.com/guides/content.aspx?g=cplusplus&seqNum=400 | tytuł = Using unique_ptr, Part I | data dostępu = 30 września 2010 | nazwisko = Kalev | imię = Danny | opublikowany = informIT}}</ref>.
 
== Deklaracja ==
Linia 59:
</pre>
 
Ten kod wypisze dla pierwszego obiektu auto_ptr adres [[null|NULL]] i inny adres dla drugiego, pokazując, że obiekt źródłowy utracił referencje podczas przypisania (=). Nie powinno się wykonywac operacji delete na źródłowym wskaźniku i, bo zostanie on usunięty przez drugi auto_ptr.
 
Trzeba zauważyć, że obiekt wskazywany przez auto_ptr jest usuwany przez operator delete; oznacza to że auto_ptr można używać tylko dla wskaźników uzyskanych przez operator new. Wyłącza to wskaźniki zwracane przez [[malloc|malloc/calloc/realloc]] i operator new[].