Указанный на объект теряется при назначении единственного указателя, который его содержит. Как указано выше, x = &y
уже теряет ваш new int
. Ничто из того, что вы делаете потом, не может вернуть его обратно. Это означает, что delete
вызывает неопределенное поведение и может привести к сбою вашей программы.
Однако в C ++ существует механизм, позволяющий избежать таких утечек памяти: Smart Pointers.
В C ++ интеллектуальные указатели бывают двух основных разновидностей ::std::unique_ptr<T>
и ::std::shared_ptr<T>
. У них есть задача удерживать объект в динамической памяти и обязательно удалять его, когда он становится неподходящим:
::std::unique_ptr<int> x = ::std::make_unique<int>(0);
x = nullptr; // automatically deletes the previously allocated int
Это немного дороже, чем необработанные указатели, но менее подвержено утечкам памяти. Умные указатели живут в заголовке <<a href="https://en.cppreference.com/w/cpp/header/memory" rel="nofollow noreferrer"> memory >.