Middle
24
0
questionbank

Когда в умных указателях не будет вызван оператор delete для объекта?

Ответ от нейросети sobes.tech
  • При использовании unique_ptr или shared_ptr, если указатель обнулен (ptr = nullptr) до того, как он вышел из области видимости или счетчик ссылок обнулился.
  • При использовании shared_ptr, если есть циклические ссылки между объектами, владеющими shared_ptr, что предотвращает обнуление счетчика ссылок. В этом случае помогает использование weak_ptr для одной из сторон цикла.
  • При передаче shared_ptr в функцию или метод по неконстантной ссылке (shared_ptr&) и последующем изменении указателя внутри этой функции/метода (например, присвоение nullptr), владение может быть утрачено, но объект может не быть удален, если существуют другие shared_ptr на этот объект.
  • При использовании shared_ptr или unique_ptr, если деструктор объекта бросает исключение. В этом случае поведение неопределено.
  • При использовании пользовательского deleter, предоставленного unique_ptr или shared_ptr, который не выполняет операцию delete для объекта.

Пример циклической ссылки с `shared_

  • При использовании unique_ptr или shared_ptr, если указатель обнулен (ptr = nullptr) до того, как он вышел из области видимости или счетчик ссылок обнулился.
  • При использовании shared_ptr, если есть циклические ссылки между объектами, владеющими shared_ptr, что предотвращает обнуление счетчика ссылок. В этом случае помогает использование weak_ptr для одной из сторон цикла.
  • При передаче shared_ptr в функцию или метод по неконстантной ссылке (shared_ptr&) и последующем изменении указателя внутри этой функции/метода (например, присвоение nullptr), владение может быть утрачено, но объект может не быть удален, если существуют другие shared_ptr на этот объект.
  • При использовании shared_ptr или unique_ptr, если деструктор объекта бросает исключение. В этом случае поведение неопределено.
  • При использовании пользовательского deleter, предоставленного unique_ptr или shared_ptr, который не выполняет операцию delete для объекта.

Пример циклической ссылки с `shared_

Зарегистрируйтесь или войдите, чтобы получить доступ к полным ответам на все вопросы из банка вопросов.

smart-pointersmemory-managementlifetimeownershipreference-counting