std::unique_ptr mit abgeleiteten Klasse
Ich habe eine Frage zu den c++11-Pointer. Speziell, wie machen Sie eine einzigartige Zeiger der Basisklasse in der abgeleiteten Klasse?
class Base
{
public:
int foo;
}
class Derived : public Base
{
public:
int bar;
}
...
std::unique_ptr<Base> basePointer(new Derived);
//now, how do I access the bar member?
sollte es möglich sein, aber ich kann nicht herausfinden, wie. Jedes mal, wenn ich versuche, mithilfe der
basePointer.get()
Ich am Ende mit der ausführbaren Datei abstürzt.
Vielen Dank im Voraus, jede Beratung wäre geschätzt.
- Sie konnten zeigen, ein vollständiges (aber minimal) - Beispiel der code, der bewirkt, dass Ihr Prozess zum Absturz bringen?
basePointer.get()
allein ist sicherlich nicht ein problem. - Ich reparierte mein problem. Ich war dabei einige wirklich seltsame casting mit mindestens 5 Sätzen von Klammern. Ich bin mir ziemlich sicher, es war nur etwas dumm, aber ich bereits geändert und kann mich nicht erinnern, was ich getan habe. Kapitän Obvlious' Antwort arbeitete für mich aber. Vielen Dank für Ihre Hilfe!
Du musst angemeldet sein, um einen Kommentar abzugeben.
Wenn Sie sind polymorphe Typen, und Sie brauchen nur einen Zeiger auf den abgeleiteten Typ verwenden
dynamic_cast
:Wenn Sie nicht polymorphe Typen benötigen nur einen Zeiger auf den abgeleiteten Typ verwenden
static_cast
und das beste hoffen:Wenn Sie brauchen, um zu konvertieren eine
unique_ptr
enthält eine polymorphe Typ:Wenn Sie brauchen, um zu konvertieren
unique_ptr
mit einer nicht-polymorphen Typ:release()
undreset()
sindnoexcept
, so es sei denn, Sie tun etwas sehr schlechtes außerhalb dieser Funktion, die raw-Zeiger wird am Ende immer in der abgeleiteten Zeiger und werden ordnungsgemäß vernichtet.basePointer
ist nicht immer, was Sie wollen in Ihrem unique_ptr-Konvertierung