【发布时间】:2023-03-15 23:59:02
【问题描述】:
我有一个这样的共享指针向量:
vector <shared_ptr<PhotoWidget>> photoWidgets;
PhotoWidget *photoWidget = new PhotoWidget;
photoWidget->setup(widget);
photoWidgets.emplace_back(move(photoWidget));
我需要清除内存,但找不到正确的方法,我阅读了类似的主题,但注意到对我有用,到目前为止我使用此代码没有任何成功。
for( auto&& widget : photoWidgets ) {
widget.reset();
}
vector<shared_ptr<PhotoWidget>>().swap(photoWidgets);
photoWidgets.clear();
photoWidgets.shrink_to_fit();
PhotoWidget 类是:
#include "ofMain.h"
#include "baseWidget.h"
#include "../lib/json.hpp"
using json = nlohmann::json;
class PhotoWidget: public BaseWidget {
public:
void setup(json config);
void update();
void draw();
void loadNewPhoto(json data);
void loadDefaultPhoto();
ofImage image;
bool defaultPhotoRunning = true;
uint64_t lastElapsedTimeMillis;
uint64_t interval;
};
【问题讨论】:
-
您是如何确定内存泄漏的?
-
附带说明 - 智能指针的目的是不自己释放内存。
-
@juanchopanza 在 linux 中使用 top 命令,我有一个用于清除和重新填充向量的外部触发器,当我使用触发器时,我可以看到应用程序的内存以不可接受的量增加
-
@nim4n 这不一定是检查内存泄漏。这只是意味着运行时尚未归还程序已释放的所有内存。
-
您可以使用 valgrind 等专用工具来告诉您是否有内存泄漏。
标签: c++ c++11 vector memory-leaks shared-ptr