C++游戏开发:作为类成员的智能指针是否会自动释放内存?
你的代码里,vector中std::shared_ptr<Enemy>指向的内存会被自动释放,完全不需要手动操作,具体流程如下:
- 当
main函数执行完毕,栈上的Game对象g会被销毁。作为Game的成员变量,level1会随之被销毁。 Level结构体里的eVector是std::vector<std::shared_ptr<Enemy>>类型,它的析构函数会在Level销毁时自动执行,遍历销毁容器内的每一个shared_ptr对象。- 每个
shared_ptr析构时会检查自身的引用计数,一旦计数降到0,就会自动调用对应对象(这里是Grunt)的析构函数,同时释放堆上的内存。
你担心level1不脱离作用域的问题——只有Game对象存在时,level1才会存活。一旦Game对象被销毁(比如main结束,或者你手动销毁堆上的Game实例),整个嵌套的销毁流程就会自动触发,内存会被正确清理。
如果需要提前手动释放(比如关卡切换时,不想等Game对象销毁),直接清空vector即可:
level1.eVector.clear();
调用clear()会销毁vector内所有shared_ptr,同样会触发引用计数检查,计数为0时就会释放对应内存。也可以直接给eVector赋值空容器,效果一致:
level1.eVector = {};
内容的提问来源于stack exchange,提问作者Fishie
相关产品推荐
相关产品推荐

