Std::unique_ptr<CKlasa> i operator= z operandem std::unique_ptr<CKlasa> &&

0

Witajcie,

Mam klasę Window, która zawiera w sobie std::unique_ptr<Viewport> viewport. W tej klasie mam metode

setViewport(std::unique_ptr<Viewport> && newViewport)
{
	viewport = newViewport;
}

W innej klasie robię tak:

 
Window wnd;
std::unique_ptr<Viewport> viewport(new Viewport);
wnd.setViewport(std::move(viewport));

Kompilator wywala błąd w metodzie setViewport w przypisaniu std::unique_ptr && do std::unique_ptr. Błąd to jakoś "Use of deleted functium operator=". Tak samo użycie reset z tym parametrem generuje ten sam błąd. Na ideone.com napisałem coś podobnego i jest ten sam błąd w C++14. Mimo to na stronie http://en.cppreference.com/w/cpp/memory/unique_ptr/operator%3D jest użycie np. p1 = std::move(p2); i widnieje też na liście deklaracji metod. WTF

0

std::forward użyj.

2

Kompilator wywala błąd w metodzie setViewport w przypisaniu std::unique_ptr && do std::unique_ptr.

Nie można przypisać tego wskaźnika.

 viewport(std::move(newViewport));
6

Jedno rozwiązanie to move, a drugie to używanie zwykłych wskaźników jako parametrów i release() w miejscu wywołania.
Poza tym używaj make_unique, w ten sposób unikasz niesparowanego new.

setViewport(Viewport *newViewport)
{
    viewport = unique_ptr<Viewport>(newViewport);
}

auto viewport = make_unique<Viewport>();
...
setViewport(viewport.release());

albo:

setViewport(unique_ptr<Viewport> &&newViewport)
{
    viewport = move(newViewport);
}

setViewport(make_unique<Viewport>());

1 użytkowników online, w tym zalogowanych: 0, gości: 1