Что такое умные указатели в С++?
Я думаю,что все знают что такое указатель(raw pointer) или необработанный указатель.Но для обычных указателей нужно особое внимание,так как они с легкостью сломают ваше приложение.Ихнее управление зависит только от вас,если вы динамически выделяете память( new some_type ),то вы должны удалить его в ручную ( delete some_type ) в массивах за это отвечает другой оператор( один из таких: delete[] ).И во время написания кода,вам нужно помнить какой оператор нужно использовать.А если вы случайно ошиблись - может привести к неопределенному поведению / Undefined behavior .
Чтобы избегать проблем с утечкой памяти,придумали умные указатели.Они сами делают деаллокацию,например когда вы выходите из функции (и многое другое).На самом деле,умные указатели это просто класс который проводит все манипуляции под капотом.Насчет деалокации - просто срабатывает деструктор класса который освобождает выделенную память.
Начиная с С++11 появилось три основных типа умных указателей:
std::unique_ptr — умный указатель, владеющий динамически выделенным ресурсом.
std::shared_ptr — это умный указатель, который управляет разделяемым динамически выделенным ресурсом. Он поддерживает совместное владение ресурсом несколькими std::shared_ptr, и внутренний счетчик отслеживает количество указателей, владеющих ресурсом.
std::weak_ptr — подобен std::shared_ptr, но не увеличивает счетчик.
Wikipedia
Undefined behavior
behavior of erroneous computer programs that the language standard permits to be unpredictable
April 1, 2024 1.1K 7 2