Angenommen, ich habe die folgende (vereinfachte Fall):Copykonstruktor: deep eine abstrakte Klasse Kopieren
class Color;
class IColor
{
public:
virtual Color getValue(const float u, const float v) const = 0;
};
class Color : public IColor
{
public:
float r,g,b;
Color(float ar, float ag, float ab) : r(ar), g(ag), b(ab) {}
Color getValue(const float u, const float v) const
{
return Color(r, g, b)
}
}
class Material
{
private:
IColor* _color;
public:
Material();
Material(const Material& m);
}
Jetzt gibt es eine Möglichkeit für mich eine tiefe Kopie des abstrakten IColor im Copykonstruktor von dem zu tun Material? Das heißt, ich möchte, dass die Werte von m._color (eine Farbe, eine Textur) kopiert werden, nicht nur der Zeiger auf IColor.
Warum wird durch das Speichern eines Zeigers auf IColor die Deep Copy deaktiviert? –
Weil es standardmäßig die Zeigeradresse in die kopierte Zeigeradresse kopiert. Es wird nicht kopiert, worauf gezeigt wird, und dann den Zeiger neu einstellen. Luke hat den besten Vorschlag, eine vom Kopierkonstruktor aufgerufene Funktion clone() zu erstellen. –