gpt4 book ai didi

c++ - vector 加上 unique_ptr 到一个对象,内存没有释放?

转载 作者:行者123 更新时间:2023-11-30 01:21:54 26 4
gpt4 key购买 nike

因此,我正在尝试将 vector 与智能指针一起使用,以便更轻松地进行内存管理,而且...好吧,我遇到了问题。这是我的代码的(大大缩短的)版本:

bulletManager.h:

class BulletManager
{
public:
BulletManager();
virtual ~BulletManager();

void AddBullet(int type, double x, double y, double vx, double vy);
void EraseAllBullets();
protected:
private:
std::vector<std::unique_ptr<Bullet>> bullets;
};

子弹管理器.cpp:

BulletManager::BulletManager()
{
bullets.reserve(50000);
}
void BulletManager::AddBullet(int type, double x, double y, double vx, double vy)
{
for(int i=0;i<1000;i++) bullets.push_back(std::unique_ptr<BasicBullet>(new BasicBullet(type, x, y, vx, vy)));
}
void BulletManager::EraseAllBullets()
{
bullets.clear();
}

BasicBullet 类是抽象 Bullet 类的子类。为了更轻松地查看内存使用情况的变化,我让 AddBullet 函数生成 1000 个对象,并将“char tab[10000]”放入项目符号类中。

现在,(根据任务管理器)发生的事情是:

  • 调用 AddBullet 一次 -> 内存使用量略有增加
  • 之后调用 EraseAllBullets -> 内存使用量根本没有下降!
  • 多次调用 AddBullet -> 内存使用量显着增加
  • 之后调用 EraseAllBullets -> 释放了大部分内存,但不是全部!

效果不是很大,而且似乎变慢了 - 程序开始时使用 10MB 的 RAM,在仅使用这两个函数一段时间后,随着每个 vector 的清除,内存使用量仅下降到 15-20MB。

我做错了什么吗?即使这应该发生,我仍然希望能够释放我分配的所有内存。

最佳答案

您不能依赖任务管理器来告诉您应用程序已分配/可用的内存量。当您释放内存时,它很可能会被 C++ 运行时中的池回收,供您的应用程序稍后重用,而不是返回给操作系统。

关于c++ - vector 加上 unique_ptr 到一个对象,内存没有释放?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17370316/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com