«Если рабочий хочет хорошо выполнять свою работу, он должен сначала заточить свои инструменты» — Конфуций, «Аналитики Конфуция. Лу Лингун»
титульная страница > программирование > Когда вызов деструктора вручную является законной практикой?

Когда вызов деструктора вручную является законной практикой?

Опубликовано 17 ноября 2024 г.
Просматривать:249

When is Manually Calling a Destructor a Legitimate Practice?

Когда оправдан вызов деструктора вручную?

Часто утверждается, что вызов деструктора вручную указывает на ошибочный дизайн. Однако возникает вопрос: существуют ли исключения из этого правила?

Контрпримеры: случаи, требующие ручного вызова деструктора

Действительно, бывают ситуации, когда это становится необходимым для явного вызова деструктора:

1. Контролируемое освобождение памяти:

Когда выделение и освобождение памяти управляются независимо от создания и уничтожения объекта, ручные вызовы деструктора становятся критически важными. В таких случаях создание объекта происходит путем размещения нового объекта в существующем буфере памяти, а разрушение происходит посредством явного вызова деструктора.

char buffer[sizeof(MyClass)];

{
     MyClass* p = new(buffer)MyClass;
     p->dosomething();
     p->~MyClass();
}

2. Конкретные распределители памяти:

Другой пример — использование std::vector стандартного std::allocator. Здесь элементы создаются во время операций push_back, но выделение памяти происходит частями, предшествующими созданию элемента. Таким образом, вектор::erase должен уничтожить элементы без обязательного освобождения памяти, особенно если дальнейшие push_backs неизбежны.

Последствия:

Вызов деструкторов вручную может нарушить строгие правила Принципы ООП, стирающие границы между управлением объектами и памятью. Однако в низкоуровневом программировании или в сценариях, где выделение и освобождение памяти разделены, это может быть уместно.

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

Последний учебник Более>

Изучайте китайский

Отказ от ответственности: Все предоставленные ресурсы частично взяты из Интернета. В случае нарушения ваших авторских прав или других прав и интересов, пожалуйста, объясните подробные причины и предоставьте доказательства авторских прав или прав и интересов, а затем отправьте их по электронной почте: [email protected]. Мы сделаем это за вас как можно скорее.

Copyright© 2022 湘ICP备2022001581号-3