Auto ptrauto_ptr je zastaralá verze smart pointeru (chytrého ukazatele) v jazyce C++. Je to 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 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í Související článkyExterní odkazy |