Использование удаленной функции

Пытаюсь разобраться в умных указателях (unique_ptr), но до конца не понимаю как это все работает. Есть функция которая задает и использует стратегию (Simple, Medium или Strong). Я создаю умный указатель и инициализирую его стратегией, которая мне нужна.

string generate_password(string _strat, int _lenght_pass, string _alphabet) {

    unique_ptr <Strategy> _strateg ;    
    PasswordGenerator _pwdgen;
    if (_strat == "simple") {
        _strateg = make_unique <Simple>();
    } else
    if (_strat == "medium") {
        _strateg = make_unique <Medium>();
    } else
    if (_strat == "strong") {
        _strateg = make_unique <Strong>();
    }
    if (_strateg) {
        _pwdgen.setStrategy(_strateg);
        string retval =  _pwdgen.useStrategy(_lenght_pass, _alphabet);
        //delete _strateg;
        return retval;
    }
    return "";
}

Но при использвонии setStrategy появляется ошибка use of deleted function. ERROR

Это функция setStrategy

void PasswordGenerator:: setStrategy(std::unique_ptr <Strategy> o)
{
    operation = o;
}

Что я делаю не так?


Ответы (1 шт):

Автор решения: Harry

unique_ptr потому так и называется, что он уникален - только один, копировать его нельзя. А вы в вызове setStrategy(std::unique_ptr <Strategy> o) именно это и пытаетесь делать...

→ Ссылка