Не удается вернуть элемент unique_ptr из массива по значению

Следующее компилируется и работает как положено:

std::unique_ptr<char> input_to_char_array()
{
    std::unique_ptr<char> c;
    c.reset(new char('b'));
    // c[1].reset(new char[20]());

    return c;
}

Но это не так:

std::unique_ptr<char> input_to_char_array()
{
    std::unique_ptr<char> c[2];
    c[0].reset(new char('b'));
    c[1].reset(new char('a'));

    return c[0]; // is this considered "return statement's expression is the name of a non-volatile object with automatic storage duration"
}

выходы g++:error: use of deleted function ‘std::unique_ptr<_Tp, _Dp>::unique_ptr(const std::unique_ptr<_Tp, _Dp>&) [with _Tp = char; _Dp = std::default_delete<char>]

Из некоторых исследований SO Возвращение unique_ptr из функций и Почему я не могу вернуть unique_ptr из пары? кажется, что все это связано с разрешением копирования и оптимизацией именованного значения.

Может ли кто-нибудь подтвердить, правильно ли мое предположение. Если да, то что именно является критерием для копирования, чтобы можно было применять NRVO?

0 ответов

Другие вопросы по тегам