mrjbom
@mrjbom

Когда удаляются умные указатели?

У меня есть пара вопросов по умным указателям, а именно по std::auto_ptr.
1. Могу ли я создать умный указатель на динамический массив? А на обычный массив? А на вектор?
2. После завершения работы программы удаляются все умные указатели? От тех что в глобальной области, до тех что в неких классах?
  • Вопрос задан
  • 143 просмотра
Решения вопроса 1
@MarkusD Куратор тега C++
все время мелю чепуху :)
std::auto_ptrявляется устаревшим и удален из стандартной библиотеки начиная со стандарта C++17.
Вместо него стоит пользоваться std::unique_ptr.

std::auto_ptr мог следить только за памятью одного экземпляра. Передать туда память массива можно, но деструктор будет вызван только у первого экземпляра массива. В общем смысле это означает утечку памяти.
std::unique_ptr, наоборот, способен контролировать память как единичного экземпляра, так и массива экземпляров. Еще в отличии от своего устаревшего товарища, std::unique_ptr способен спокойно передавать свое состояние, не создавая возможность двойного освобождения памяти. В дополнение, std::unique_ptr еще способен пользоваться нестандартными деструкторами, что очень кстати при работе, например, с COM-объектами или нестандартной схемой аллокации памяти.

Любой умный указатель является обычным объектом своего типа. Все объекты всех типов имеют свое время жизни, согласно условиям своего конструирования.
Умные указатели разрушаются тогда, когда завершается их время жизни. Для умных указателей в глобальном пространстве время жизни завершается сразу после выхода из main.

В языке нет термина "обычный массив", этот вопрос непонятен.
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы