C++ 使用unique_ptr生成的堆元素是否移动到堆栈中,仍然在堆上分配?
我无法理解唯一指针的行为。如果我在堆上分配一个对象C++ 使用unique_ptr生成的堆元素是否移动到堆栈中,仍然在堆上分配?,c++,stack,smart-pointers,heap-memory,C++,Stack,Smart Pointers,Heap Memory,我无法理解唯一指针的行为。如果我在堆上分配一个对象 std::unique_ptr mMenuPtr(新主菜单) 然后push()和move()像这样把它放到我的游戏状态堆栈中 gameStates.push(std::move(mMenuPtr)); //pointer loses ownership of MainMenu during move 堆栈上的元素是否仍在堆上动态分配?如果是这样的话,在结束作用域销毁堆栈是否会释放我分配给new的内存,或者我是否需要其他方式来销毁该对象以防止内
std::unique_ptr mMenuPtr(新主菜单)代码>
然后push()
和move()
像这样把它放到我的游戏状态堆栈中
gameStates.push(std::move(mMenuPtr)); //pointer loses ownership of MainMenu during move
堆栈上的元素是否仍在堆上动态分配?如果是这样的话,在结束作用域销毁堆栈是否会释放我分配给new的内存,或者我是否需要其他方式来销毁该对象以防止内存泄漏
我知道unique\u ptr
的主要目的是在失去对象所有权后为您处理解除分配。我有点不知道该怎么办
查看STL API,我唯一的选择似乎是unique\u ptr
的get()函数,它允许我在执行move()
后重新访问该对象,这正是我想要的,因为我仍然希望能够跨多个文件访问堆栈元素,即使unique\u ptr
销毁了它自己……但理想的方法是什么呢
像这样
GameState*statePtr=sScreen.get()
unique\u ptr
将始终释放对象,除非调用release
GameState
对象仍在堆上分配。指针的所有权已传递给堆栈/向量。堆栈上的unique\u ptr
在其析构函数中不会执行任何操作(因为其指针在移动后为空),如果堆栈/向量在再次移动对象之前被析构函数,则堆栈/向量的析构函数将调用delete。unique\u ptr
将始终释放对象,除非调用release
GameState
对象仍在堆上分配。指针的所有权已传递给堆栈/向量。堆栈上的unique\u ptr
在其析构函数中不会执行任何操作(因为其指针在移动后为空),如果堆栈/向量在再次移动对象之前被析构函数,则堆栈/向量的析构函数将调用delete。确定以澄清。。。堆栈的销毁将为我处理分配的游戏状态?是的,它调用其所有元素的析构函数,这将是唯一的_ptr,然后在其元素上调用析构函数(如果为NULL,则不调用)。好的,澄清一下。。。堆栈的销毁将为我处理分配的游戏状态?是的,它调用其所有元素的析构函数,这将是唯一的_ptr,然后在其元素上调用析构函数(如果为NULL,则不调用)。