У меня возникли проблемы с пониманием поведения уникальных указателей. Если я выделить объект на куче ...Являются ли элементы кучи, сделанные с помощью unique_ptr, перемещены в стек, все еще выделенные на кучу?
std::unique_ptr<GameState> mMenuPtr(new MainMenu);
, а затем push()
и move()
это на мой стек GameState как так ...
gameStates.push(std::move(mMenuPtr)); //pointer loses ownership of MainMenu during move
ли элемент в стеке еще динамически выделено на кучу? Если да, то разрушает ли стек в конце области освобождает память, которую я выделил, или мне нужен другой способ разрушения этого объекта, чтобы предотвратить утечку памяти?
Я знаю, что основная цель unique_ptr
заключается в том, чтобы обрабатывать освобождение для вас, но после потери собственности на свой объект. Я не знаю, что делать ...
Посмотрите на API STL, кажется, единственный вариант, который у меня есть, - это функция get() unique_ptr
, которая позволяет мне повторно получить доступ к этому объекту после выполнения move()
, это то, что я хочу, потому что я все еще хочу иметь доступ к этому элементу стека через несколько файлов даже после того, как unique_ptr
уничтожает себя .... но что было бы идеальным способом сделать это?
Нравится?
GameState* statePtr = sScreen.get();
Хорошо, чтобы разъяснить, что ... Уничтожение стека позаботится о выделенном GameState для меня? – PrimRock
Да, он вызывает деструктор всех его элементов, который будет этот unique_ptr, который затем вызывает деструктор на свой элемент (или ничего, если NULL). –