Программирование игр, создание игрового движка, OpenGL, DirectX, физика, форум
GameDev.ru / Программирование / Термины / Умный указатель (Smart pointer)

Умный указатель (Smart pointer)

Умный указатель (Smart pointer) — класс (обычно шаблонный), имитирующий интерфейс обычного указателя (перезагрузка operator->) и добавляющий некую новую функциональность. Применяет принцип RAII, рассматривая в качестве ресурса любые объекты.

Например, указатель CComPtr инкапсулирует владение COM-объектами и может использоваться при программировании DirectX. Стандартный указатель std::auto_ptr инкапсулирует владение динамически созданным в памяти объектом.

Умный указатель инкапсулирует семантику владения ресурсом. Семантика владения для динамически созданных объектов означает, что при удалении указателя объект также будет удалён (а именно, будут вызваны деструктор для объекта и operator delete для его блока памяти).

Кроме того, умные указатели могут реализовывать (а могут и нет!) семантику копирования/присваивания. Обычно это делается через счётчики ссылок, это реализуют указатели boost::shared_ptr и boost::intrusive_ptr.

std::auto_ptr не имеет семантик копирования/присваивания, хотя он и имеет конструктор, похожий на конструктор копий, и перегруженный operator =. Поэтому с ним нужно обращаться крайне осторожно (нельзя, например, безопасно передать его в функцию по значению). Он не может быть элементом стандартных контейнеров STL, так как не удовлетворяет требованиям CopyConstructible и Assignable стандарта C++.

Ссылки:

http://www.boost.org/doc/libs/1_35_0/libs/smart_ptr/shared_ptr.htm
http://www.boost.org/doc/libs/1_35_0/libs/smart_ptr/intrusive_ptr.html
http://c2.com/cgi/wiki?AutoPtr

Что такое Умный указатель (Smart pointer)?

1 августа 2005

#C++, #шаблоны


Обновление: 11 мая 2010

2001—2018 © GameDev.ru — Разработка игр