5
Ich habe ein Problem, bei dem ich ein Objekt kopieren möchte, es aber vermeiden möchte, es zu schneiden.Objekt-Slicing vermeiden C++
DerivedObj derivedObj;
myFunc(derivedObj);
void myFunc(MyObj &obj)
{
MyObj *saveForLater = new MyObj(obj); // slices my object
// ... //
}
Gibt es einen Weg, um dies zu umgehen? Ich muss eine Kopie erstellen, da das ursprüngliche Objekt den Bereich verlassen hat, bevor es benötigt wird.
@clcto wie wird es einen Unterschied machen? –
@clcto Das Übergeben eines Zeigers gegen eine Referenz ist kein Problem. Zeiger * und * Referenzen werden NICHT geschnitten. Ziehe Pointer und Referenzen "non-slicable" in Betracht. Das Slicen geschieht auf der Anweisung mit dem 'neuen' Aufruf. –
Soweit ich weiß, haben Sie zwei Hauptoptionen, haben eine virtuelle Methode namens 'clone()' oder können eine Art Besitz von 'obj' zu' myFunc() 'geben, vielleicht mit einem' shared_ptr '. –