Smart pointer

Smart pointer (chytrý ukazatel) je abstraktní datový typ, který poskytuje funkčnost ukazatele, kterou ovšem rozšiřuje o další schopnosti, typicky řízení doby života (automatické uvolňování paměti, garbage collection), zajištění synchronizace při vícevláknovém programování apod.

Klasické ukazatele mají mnoho nepohodlných vlastností a jejich správné užívání je relativně obtížné; často jsou proto zdrojem programátorských chyb. Smart pointery programátora od některých aspektů práce s ukazateli odstiňují a zjednodušují tak jejich používání. Nejběžnějším příkladem chyby při práci s ukazatelem je jeho neuvolnění, kvůli kterému dochází k tzv. úniku paměti (memory leak). Smart pointer se o toto uvolnění stará sám automaticky, zpravidla v okamžiku, kdy smart pointeru končí jeho doba života (k čemuž typicky dojde na konci rozsahu platnosti příslušné proměnné).

V jazycích, které používají automatickou správu paměti pomocí garbage collection, se obvykle smart pointery nepoužívají.

Příklad v C++

Jednoduchý příklad porovnávající použití smart pointeru v jazyce C++ (implementovaného třídou auto_ptr) s obdobou bez smart pointerů:

int funkce_bez_smart_pointeru()
{
  Třída *p = new Třída;         // vytvoří instanci třídy v nově alokované paměti
  p->pracuj();                  // používá instanci
  delete p;                     // zruší instanci a uvolní paměť
}

int funkce_se_smart_pointerem()
{
  auto_ptr<Třída> p(new Třída); // novou instanci a její paměť obalí do smart pointeru
  p->pracuj();                  // používá instanci
} // před skončením bloku se paměť uvolní automaticky

Je vidět, že při použití smart pointeru není potřeba ukazatel uvolňovat pomocí delete. Zásadní výhodu však představuje fakt, že v uvedeném příkladu bez použití smart pointeru dojde k úniku paměti v případě, že metoda pracuj způsobí výjimku, zatímco s použitím smart pointeru k úniku paměti nedojde, neboť i v takovém případě bude objekt správně uvolněn. Odstranění tohoto nedostatku bez použití smart pointerů (či obdobných technik) je poměrně pracné (množstvím kódu, nikoli snad jeho složitostí) a smart pointery zde tedy zřetelně usnadnují práci. Malou nevýhodou smart pointeru může být obtížnější ladění. Při krokování programu dělá některým hloupějším debuggerům problém vypsat prvky objektu, pokud je jeho proměnná definována přes smart pointer.

Související články

Externí odkazy


Zdroj datcs.wikipedia.org
Originálcs.wikipedia.org/wiki/Smart_pointer
Zobrazit sloupec 

Kalkulačka - Výpočet

Výpočet čisté mzdy

Důchodová kalkulačka

Přídavky na dítě

Příspěvek na bydlení

Rodičovský příspěvek

Životní minimum

Hypoteční kalkulačka

Povinné ručení

Banky a Bankomaty

Úrokové sazby, Hypotéky

Směnárny - Euro, Dolar

Práce - Volná místa

Úřad práce, Mzda, Platy

Dávky a příspěvky

Nemocenská, Porodné

Podpora v nezaměstnanosti

Důchody

Investice

Burza - ČEZ

Dluhopisy, Podílové fondy

Ekonomika - HDP, Mzdy

Kryptoměny - Bitcoin, Ethereum

Drahé kovy

Zlato, Investiční zlato, Stříbro

Ropa - PHM, Benzín, Nafta, Nafta v Evropě

Podnikání

Města a obce, PSČ

Katastr nemovitostí

Katastrální úřady

Ochranné známky

Občanský zákoník

Zákoník práce

Stavební zákon

Daně, formuláře

Další odkazy

Auto - Cena, Spolehlivost

Registr vozidel - Technický průkaz, eTechničák

Finanční katalog

Volby, Mapa webu

English version

Czech currency

Prague stock exchange


Ochrana dat, Cookies

 

Copyright © 2000 - 2024

Kurzy.cz, spol. s r.o., AliaWeb, spol. s r.o.