c++ - 如何修复 C++ 内存泄漏?
问题描述
我有这样的代码,当class A
管理一个对象B
时vector<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();
}
}
解决方案
您的屏幕截图未显示您的应用程序的内存。它显示了 Xcode 的内存。是 Xcode 占用了这么多内存,可能是因为它保留了日志,cout
以便您可以滚动浏览它。