我有一个像这样的共享指针 vector :

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;
};

最佳答案

我发现了问题,我更改了这一部分:

PhotoWidget *photoWidget = new PhotoWidget;
photoWidget->setup(widget);
photoWidgets.emplace_back(move(photoWidget));

为此,问题得以解决:
photoWidgets.emplace_back(make_shared<PhotoWidget>());
photoWidgets[widget["ID"]]->setup(widget);

在这种情况下,似乎无法在变量中创建新的指针正常工作。

09-07 10:45