首页 > 解决方案 > 如何修复 C++ 内存泄漏?

问题描述

我有这样的代码,当class A管理一个对象Bvector<shared_ptr<B>>,然后我从一个静态方法创建一个A,当我这样做时,我认为如果A::returnA()超出范围,那么A::returnA()将被删除,然后B管理的A被删除,然后vector<shared_ptr<B>>被删除。

但是,当我运行这段代码时,监视器中显示的内存使用量很大,并且还在不断增加,我不知道为什么这是内存泄漏。

#include <vector>
#include <memory>
#include <iostream>
using namespace std;

class A {
public:
    static A returnA(){
        return A();
    }
    class B {
    public:
        ~B() { cout << "~B" << endl; }
    };
    B b;
    vector<std::shared_ptr<B>> v;
    A(){
        std::unique_ptr<B> b2 = make_unique<B>();
        v.emplace_back(new B());
    };
    ~A() { cout << "~A" << endl; }
};

int main() {
    while(1){
        A::returnA();
    }
}

在此处输入图像描述

标签: c++memory-leaks

解决方案


您的屏幕截图未显示您的应用程序的内存。它显示了 Xcode 的内存。是 Xcode 占用了这么多内存,可能是因为它保留了日志,cout以便您可以滚动浏览它。


推荐阅读