C ++ unique_ptr lvalue "использование удаленной функции" ошибка - PullRequest
0 голосов
/ 04 августа 2020
using intPtr = unique_ptr<int>;
void f(intPtr&& i) {}

Учитывая функцию, которая принимает unique_ptr&& в качестве входных данных.

Моя цель - где-то сохранить этот ptr и вызывать эту функцию в будущем с тем же ptr.

Поэтому я попытался сохранить его в списке и реализовать f как:

list<intPtr&&> l;

void f(intPtr&& i) {
    if(*i == 5) l.insert(std::move(i));
    else cout << *i;
}

Однако, когда я попытался посетить список и передать его функции f, я получил use of deleted function ‘std::unique_ptr<_Tp, _Dp>::unique_ptr(const std::unique_ptr<_Tp, _Dp>&) [with _Tp = int; _Dp = std::default_delete<int>]’

void g() {
    for(auto& x : l) {
        *x += 3;
        f(std::move(x));
    }
}

int main() {
    int x = 5;
    intPtr up = make_unique<int>(x);
    f(std::move(up));
    
    g();
}

Пожалуйста, помогите решить эту ошибку. Как мне определить тип списка и как мне посетить unique_ptr && в списке.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...