You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

C++游戏开发:作为类成员的智能指针是否会自动释放内存?

关于std::shared_ptr内存自动释放的问题解答

你的代码里,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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.14 07:15:56