Unique_ptr в векторе как атрибут структуры - PullRequest
0 голосов
/ 12 мая 2018

У меня небольшие проблемы в C ++ со структурой, которая должна содержать unique_ptr.Часть структуры:

    struct test {
        std::vector <std::unique_ptr<function>> allFunctions;        
    }

, где

     function 

- другая структура.Я всегда получаю C2280, пытаясь сослаться на удаленную функцию

Как вы можете подозревать, я довольно новичок в C ++ и у меня мало опыта.И я должен использовать unique_ptr, так как это часть упражнения.

Спасибо вам уже за вашу помощь!:)

1 Ответ

0 голосов
/ 12 мая 2018

Ошибка в коде, который использует test, т.е. код, который вы не показывали.

std::unique_ptr по определению не может быть скопирован (это уникально !),Это делает вашу структуру недоступной для копирования.

Если вы попытаетесь скопировать test куда-нибудь, компилятор скажет вам, что нет std::unique_ptr::operator =, который необходим для копирования.

ДляНапример:

test x;
test y = x;  // Copying. Error C2280

Или

void someFunction(test x) {}

int main() {
    test x;
    someFunction(x);  // Copying. Error C2280
}

Error C2280 'std::unique_ptr<function,std::default_delete<_Ty>> &std::unique_ptr<_Ty,std::default_delete<_Ty>>::operator =(const std::unique_ptr<_Ty,std::default_delete<_Ty>> &)': attempting to reference a deleted function

Решение состоит в том, чтобы избежать копирования test.Вы можете достичь этого, передав его по ссылке.

void someFunction(test& x) {}

int main() {
    test x;
    someFunction(x);  // OK
}
...