Выбор ответа Middle RAII и умные указатели обновлено
Цена unique_ptr
Вопрос
Почему std::unique_ptr<T> с удалителем по умолчанию называют абстракцией без накладных расходов?
Попробуйте сами
Выберите вариант, и откроется разбор.
Показать ответ и разбор
Коротко
Правильный ответ: Его размер равен сырому указателю, а код после оптимизации такой же. Удалитель по умолчанию пустой класс и не занимает места, поэтому sizeof(std::uniqueptr<T) == sizeof(T) в основных реализациях, а все операции встраиваются.
Варианты ответа
- Он хранит счётчик ссылок в самом объекте и не выделяет управляющий блок
- Его размер равен сырому указателю, а код после оптимизации такой жеправильный ответ
- Он не вызывает деструктор объекта, а только освобождает память
- Он размещает объект на стеке, поэтому не тратит время на аллокацию
Разбор
Удалитель по умолчанию пустой класс и не занимает места, поэтому sizeof(std::unique_ptr<T>) == sizeof(T*) в основных реализациях, а все операции встраиваются. Пользовательский удалитель-указатель на функцию увеличит размер.
- Счётчиков у unique_ptr нет, это свойство shared_ptr (и он хранит их в управляющем блоке, а не в объекте).
- Деструктор вызывается: в этом весь смысл.
- Объект живёт там, где его создали, обычно в куче через make_unique.
Ответьте сами, а не прочитайте
В тренажёре вопрос попадёт в повторения и вернётся, когда начнёт забываться. Плюс билеты с зачётом: 20 вопросов, не больше 2 ошибок.