Betrachten Sie die folgende Codezeile:
%Vor%Wie kann das mit der neuen Funktion std :: make_unique geschrieben werden, die von VS 2013 unterstützt wird? Ist es überhaupt möglich? *
* Mein Problem ist, dass ich nicht weiß, wie man 'make_unique' sagen soll, welche Art von Objekt instanziiert werden soll. Da nur die Parameter des Konstruktors übergeben werden, scheint es keine Kontrolle darüber zu geben ...
Ja, Sie können natürlich make_unique
dafür verwenden, aber es ist nicht so nützlich, wie Sie vielleicht möchten. Sie haben folgende Möglichkeiten:
Ich würde sagen, die wahre Frage ist: "Warum willst du das?"
Im Gegensatz zu make_shared
hat make_unique
keine Zuweisungsvorteile gegenüber new
. Wenn Sie also die Kontrolle über den Typ des Zeigers benötigen, ist es gut, was Sie tun.
Warum müssen Sie den Zeiger zuerst in IGpsSource
eingeben? Eine implizite Konvertierung von std::unique_ptr<Derived>
rvalues nach std::unique_ptr<Base>
rvalues existiert. Wenn Sie also make_unique
aufrufen, um einen IGpsSource
-Zeiger zu initialisieren, funktioniert das problemlos. Und wenn du den Zeiger irgendwohin transferieren willst, musst du std::move
auf jeden Fall machen, dann kann die Konvertierung wieder passieren.
Derived
verwendet die öffentliche Vererbung. Ich wollte das nur der Vollständigkeit halber hinzufügen.
Tags und Links c++ unique-ptr std