albumu: http://herbsutter.com/2013/05/22/gotw-5-solution-overriding-virtual-functions/Dlaczego zainicjować unique_ptr za pomocą wywołania make_unique?
Dlaczego powinniśmy napisać:
auto pb = unique_ptr<base>{ make_unique<derived>() };
Zamiast:
auto pb = make_unique<derived>();
My tylko przypuszczenie, że jeśli chcemy auto
, musimy mu pomóc wyprowadzić właściwy typ (base
tutaj).
Jeśli tak, to dla mnie to byłoby naprawdę wątpliwa zasługa .. wpisywać auto
a następnie wpisz dużo inicjalizacji po prawej stronie =
..
Czego mi brakuje?
Erm, dlaczego? Ponieważ chcesz pierwszą rzecz, a nie drugą? Nie są one równoważne. (Sprawdź 'decltype (pb)') –
jedno jest jasne, jeśli masz smart_pointer z pochodnych, nie możesz łatwo rzucić go do bazy. ponieważ w przeciwieństwie do bazy * x; i wyprowadzono * y; Brak powiązania w hierarchii typów. – Alex
Zastanawiasz się, czy 'unique_ptr pb = make_unique ();' być prostsze? Ponieważ "auto" istnieje, nie oznacza, że musimy z niego korzystać. –
FredericS