用 unique_ptr 生成的堆元素是否已移动到仍在堆上分配的堆栈中?

Are heap elements made with unique_ptr moved to the stack still allocated on the heap?

我无法理解唯一指针的行为。如果我在堆上分配一个对象...

std::unique_ptr<GameState> mMenuPtr(new MainMenu);

然后 push()move() 它到我的 GameState 堆栈,就像这样...

gameStates.push(std::move(mMenuPtr)); //pointer loses ownership of MainMenu during move

栈上的元素还在堆上动态分配吗?如果是这样,结束作用域中堆栈的破坏是否释放了我用 new 分配的内存,或者我是否需要一些其他方法来破坏该对象以防止内存泄漏?

我知道 unique_ptr 的主要目的是为您处理释放,但在失去其对象的所有权之后。我有点不知所措...

查看 STL API 似乎我唯一的选择是 unique_ptr 的 get() 函数,它允许我在执行 [=14= 之后重新访问该对象],这就是我想要的,因为我仍然希望能够跨多个文件访问该堆栈元素,即使在 unique_ptr 销毁自身之后......但是理想的方法是什么?

像这样?

GameState* statePtr = sScreen.get();

unique_ptr 将始终释放对象,除非调用 release

GameState 对象仍然分配在堆上。指针的所有权已传递给 stack/vector。堆栈上的 unique_ptr 将在其析构函数中不执行任何操作(因为其指针在移动后为 NULL),如果 stack/vector 在再次移动对象。