Разберите срок жизни временного объекта, переданного в конструктор класса, который сохраняет его через ссылку-член.
База Hintsage
Управление памятью
RAII, время жизни объектов, указатели и владение ресурсами.
Практика
Вопросы: Управление памятью
Зачем при копирующем присваивании RAII-обёртки сначала создавать копию нового ресурса?
Требуется передать ресурс из std::unique_ptr в C-функцию, которая при успехе принимает владение через сырой указатель. Как обеспечить отсутствие утечки при исключении до успешной передачи?
В контейнере хранится набор объектов с единственным владельцем. Определите, что произойдёт с владением ресурсами после перемещения контейнера:
#include <memory>
#include <vector>
int main() {
std::vector<std::unique_ptr<int>> source;
source.push_back(std::make_unique<int>(42));
auto target = std::move(source);
}
Кому принадлежат объекты после этой операции и что гарантируется о состоянии source?
В API объект с автоматическим временем жизни передали в std::shared_ptr: к чему приведёт уничтожение последнего владельца?
Рассмотрите создание владельца из сырого указателя. Предположим, что после успешного new выделение control block для std::shared_ptr завершается исключением. Кто освободит объект?
#include <memory>
struct Deleter {
void operator()(int* p) const noexcept {
delete p;
}
};
void create() {
std::shared_ptr<int> value(new int(42), Deleter{});
}
Какие инварианты должен обеспечить перемещающий конструктор собственной RAII-обёртки, чтобы после перемещения ресурс освобождался ровно один раз?
Объясните механизм, благодаря которому std::lock_guard освобождает мьютекс при раннем выходе из области видимости.
Нужно переместить владение из одного непустого std::unique_ptr в другой уже владеющий ресурсом. Как изменится судьба обоих ресурсов?
Что происходит с указателем на элемент std::vector при его перемещающем конструировании в другой контейнер?
При добавлении нового элемента в std::list почему указатель на уже существующий элемент не инвалидируется?
Сколько объектов типа T существует в std::vector<T> сразу после резервирования памяти, если размер контейнера остаётся нулевым?
При расширении std::vector почему наличие noexcept у перемещающего конструктора элемента может изменить способ переноса объектов?
Сравнение: когда для ресурса с одним владельцем следует выбрать std::unique_ptr вместо std::shared_ptr?
В какой момент тип, которым владеет std::unique_ptr, обязан быть полным?
Сравните проверку доступности объекта через std::weak_ptr::expired() с попыткой получить std::shared_ptr через lock(): какой способ корректен при возможном уничтожении объекта другим потоком?
Разбор последствий: что означает вызов delete this для времени жизни объекта и дальнейшего доступа к нему?
В классе, которым управляет std::shared_ptr, метод должен вернуть std::shared_ptr на тот же объект без создания второго владельца. Как устроить это безопасно с помощью std::enable_shared_from_this?
Почему std::make_unique безопаснее прямой передачи результата new в функцию с несколькими аргументами?
Когда уничтожается локальный объект со статическим временем хранения, созданный при первом обращении к функции, и почему это не совпадает с выходом из функции?
Показано 1–20 из 50