unique_ptr and vector
От: Cruser Украина  
Дата: 17.11.15 16:26
Оценка: -1
Есть структура с unique_ptr.

struct S
{
    S() = default;
    S(const S&) = delete;
    S(S&& src) :
        p(std::move(src.p))
    {
    }

    std::unique_ptr<int>   p;
}


есть вектор типа

std::vector<S> v;


код
for(auto p = v.begin(); p!= v.end(); ++p) {...}


компилиться, а код:

for(auto p : v)


не компилиться — ему надо копи конструктор:

error: use of deleted function ‘S::S(const S&)


можно ли его как-то реализовать? Может сделать так:

S::S(const S& src) { p.reset(src.p) }


?
Re: unique_ptr and vector
От: Stanislav V. Zudin Россия  
Дата: 17.11.15 16:33
Оценка: 4 (1) +1
Здравствуйте, Cruser, Вы писали:


C> Есть структура с unique_ptr.

хъ
C>есть вектор типа

C>
C>std::vector<S> v;
C>


C>код:


C>
C>for(auto p : v)
C>


C>не компилиться — ему надо копи конструктор:



Попробуй помочь компилятору:
for(auto & p : v)
_____________________
С уважением,
Stanislav V. Zudin
Re[2]: unique_ptr and vector
От: Alexander G Украина  
Дата: 18.11.15 07:42
Оценка: 101 (2)
Здравствуйте, Stanislav V. Zudin, Вы писали:


SVZ>Попробуй помочь компилятору:

SVZ>
SVZ>for(auto & p : v)
SVZ>


Как другой вариант — заставить компилятор использовать именно тот тип, что возвращается функцией

for(decltype(auto) p : v)


Хотя в случае разыменования правильного итератора преимуществ нет, там всегда ссылка.
Разве что с decltype(auto) будет работать и для deprecated специализации vector<bool>, где разыменование итератора возвращает не ссылку.
Русский военный корабль идёт ко дну!
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.