Как вернуть std::unique_ptr из контейнера

231
02 сентября 2018, 22:30

У меня есть stl или boost контейнер хранящий std::unique_ptr. Как известно std::unique_ptr поддерживают только move симатику в связи с чем возникает вопрос, как вернуть перемещённый ранее в контейнер указатель?

#include <boost/circular_buffer.hpp>
...
using boost::circular_buffer;
...
int main() {
    circular_buffer<unique_ptr<int>> cb(10);
    std::mutex mut;
    std::future async = std::async(std::launch::async, [&]() -> void {
        while (true) {
            std::this_thread::sleep_for(10ms);
            std::lock_guard<std::mutex> lock(mut);
            if (!cb.empty()) {
                unique_ptr<int> tmp = cb.back(); // Как тут сделать так что бы был вызван move конструктор?                                 
                cout << "[" << *tmp << "]";
                cb.pop_back();                               
            }
        }
        1 + 1;
    });
    while (true) {
        std::lock_guard<std::mutex> lock(mut);
        unique_ptr<int> tmp = std::make_unique<int>(0);
        cin >> *tmp;
        cb.push_front(std::move(tmp));
    };
    return 0;
}
Answer 1

Достаточно выполнить move:

::std::unique_ptr<int> tmp{::std::move(cb.back())};
READ ALSO
системы сборки c++ в qt

системы сборки c++ в qt

Переустановив qt (звучит как прям история,minGW для qt на windows 64-bit(и не только)) и отогнав сомнения насчет minGW я захотел в qt creator написать hello world

197
cmake &amp; qt проблемы

cmake & qt проблемы

Возникла проблема: не могу собрать проект использующий qt с помощью cmake (сам код верный, так как его можно собрать с помощью pro-fileМой cmake-файл:

190
Как правильно преобразовать дату?

Как правильно преобразовать дату?

Есть данные в String "2018-07-09T08:26:38125+0000"

168
Как задать прозрачный фон в SurfaceView? Android

Как задать прозрачный фон в SurfaceView? Android

В приложении имеется view с графиком, поверх которой располагается другая view, потомок SurfaceViewНа SurfaceView предполагается возможность рисования...

155