В конструкторе RAII-класса второе поле выбрасывает исключение: какие подобъекты уничтожаются и почему?
База Hintsage
Управление памятью
RAII, время жизни объектов, указатели и владение ресурсами.
Практика
Вопросы: Управление памятью
Рассмотрите функцию и определите, допустим ли доступ к возвращённому контейнеру:
#include <cstddef>
#include <memory_resource>
#include <vector>
std::pmr::vector<int> make_vector() {
std::byte buffer[128];
std::pmr::monotonic_buffer_resource pool{buffer, sizeof buffer};
std::pmr::vector<int> values{&pool};
values.push_back(42);
return values;
}
int main() {
auto values = make_vector();
return values[0];
}
Объясните последствия для времени жизни памяти и владения ресурсом.
Верно ли утверждение, что std::shared_ptr делает объект безопасным для одновременного доступа из нескольких потоков?
Почему пользовательский deleter входит в тип std::unique_ptr и как это влияет на совместимость разных unique_ptr?
В чём опасность хранения массива, созданного через new[], в std::unique_ptr<T> вместо std::unique_ptr<T[]>?
При сбросе std::optional с содержащимся объектом что происходит с указателем, ранее полученным на этот объект?
Объясните, почему std::span не продлевает время жизни представляемого диапазона.
К какому моменту указатель raw становится недействительным после вызова drop? Рассмотрите код и назовите последствие обращения к нему.
Вызов release() у std::unique_ptr: кто отвечает за ресурс, если возвращённый указатель потерян?
Сравнение: чем отличается освобождение памяти при создании std::shared_ptr через std::make_shared от отдельного выделения объекта, если std::weak_ptr продолжает существовать?
После placement new в той же памяти почему старый указатель на объект с константным подобъектом может потребовать std::launder?
После перемещения std::unique_ptr в другой объект можно ли безопасно обращаться к исходному указателю?
Что происходит со счётчиком владельцев std::shared_ptr при передаче такого указателя в функцию по значению?
Представьте, что деструктор RAII-класса выбрасывает исключение во время раскрутки стека из-за другого исключения. Как завершится программа и почему?
Объясните, как алиасинг-конструктор std::shared_ptr позволяет владеть объектом, указывая на его подобъект.
В практической ситуации функция возвращает ссылку на элемент std::vector. Как увеличение размера контейнера может сделать эту ссылку недействительной?
Что происходит со временем жизни объекта после явного вызова его деструктора, если память под него не освобождена?
При передаче временного объекта в функцию по константной ссылке какой срок жизни действует, если функция сохраняет эту ссылку для последующего использования?
Разберите последствия создания временного RAII-объекта без сохранения его в переменной.
Каковы последствия уничтожения объекта производного класса через std::unique_ptr к базовому классу, если у базового деструктор невиртуальный?
Показано 21–40 из 50