Безопасно ли использовать текущий объект в хранилище уничтоженного объекта?C++

Программы на C++. Форум разработчиков
Ответить
Гость
 Безопасно ли использовать текущий объект в хранилище уничтоженного объекта?

Сообщение Гость »


В этом примере кода объект создается в хранилище другого объекта с использованием нового размещения, а доступ к освобожденной памяти никогда не осуществляется.

Вот последовательность событий:
[*]Новый объект Object1 создается в выделенной памяти. Object2 является объединением, поэтому его не трогают. [*]Объект2 создается внутри Объекта1 с использованием нового размещения. [*]Объект1 уничтожен. Объект 2 нетронут. [*]Содержимое объекта2 распечатано [*]Вызывается деструктор Object2 [*]Память для Object1 удалена
Это безопасно?
#include #include структура Object2 { символ а{1}; символ б{2}; символ c{3}; }; структура Object1 { // // отключаем время жизни Object2 от Object1 // союз { Объект2 о; }; символ d{3}; Объект1() { } }; int main(int argc, char* argv[]) { // // Создаём объект1, внутренний объект2 ещё не создан // Объект1* объект1 = новый Объект1(); // // создаем объект2 внутри объекта1, используя новое размещение // новый (&object1->o) Object2(); Объект2* объект2 = &object1->o; // // Уничтожаем объект 1, но не освобождаем память и не трогаем объект 2 // объект1->~Объект1(); // // Доступ к живому объекту2 внутри памяти объекта2 // printf("a,b,c=(%d,%d,%d)\n", object2->a, object2->b, object2->c); // // Уничтожаем объект2 // объект2->~Объект2(); // // Деструктор уже был вызван, поэтому можно безопасно удалить память без вызова деструктора // оператор удаления (объект1); }
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «C++»