我有一个像这样的共享指针向量:
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;
};
答案 0 :(得分:2)
我发现了问题,我改变了这一部分:
PhotoWidget *photoWidget = new PhotoWidget;
photoWidget->setup(widget);
photoWidgets.emplace_back(move(photoWidget));
对此,问题解决了:
photoWidgets.emplace_back(make_shared<PhotoWidget>());
photoWidgets[widget["ID"]]->setup(widget);
在这种情况下,似乎有些如何在变量中创建新指针无法正常工作。