Ich habe einen intelligenten Zeiger einer Basisklasse Objekt Slicing zu verhindern etwa so:Foto von shared_ptr in Fehler führt: „keine Instanz überladene Funktion“ zu wollen, wenn Vektorliste push_back
vector<shared_ptr<BaseClass>> vectorOfObjects;
ich weitergeben möchte diese Aufgabe durch eine Funktion ein abgeleitetes Objekt zu der Vektorliste hinzu:
function(vector<shared_ptr<BaseClass>>& vectorOfObjects) {}
In dieser Funktion habe ich ein neues abgeleitete Objekt erstellen, das ich auf die Liste hinzufügen mag:
DerivedClass derivedObject = DerivedClass();
vectorOfObjects.push_back(&derivedObject);
ich einen Fehler unter dem Punkt der letzten Zeile bekommen
no instance of overloaded function std::vector<_Ty,_Ax>::pushback
[with _Ty="std::tr1::shared_ptr<BaseClass>,_Ax=std::allocator<std:
:tr1::shared_ptr<BaseClass>>]" matches the argument list
Jede Hilfe bei allen würde geschätzt viel über die besagt, wie ich kann nicht die richtige Lösung zu finden scheinen, um einen Vektor passieren aus eines Zeigers von Objekten (erforderlich, um Objekt-Slicing zu verhindern) durch eine Funktion.
Das ist nicht wie geteilte Zeiger arbeiten. Sie teilen sich das Eigentum an einem * dynamisch zugewiesenen * Objekt. –
@KerrekSB Ich habe Online-Empfehlungen gesehen, um die Verwendung von rohen Zeigern aufgrund von finddlichem Speichermanagement zu vermeiden, und so war dies die Alternative als ein intelligenter Zeiger. –
Das Problem mit C++ ist, dass es kein einfaches Rezeptbuch gibt, dem Sie blind folgen können. Es gibt viele gute Tools, aber Sie müssen immer noch verstehen, wozu sie dienen und wann. Höchstwahrscheinlich möchten Sie keine zusätzliche dynamische Zuweisung und keine gemeinsame Eigentümerschaft, aber es ist natürlich unmöglich, ohne Kontext zu sagen. –