Giả sử tôi đã như sau (đơn giản trường hợp):Sao chép constructor: sâu sao chép một lớp trừu tượng
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);
}
Bây giờ, là có cách nào cho tôi để làm một bản sao sâu của iColor trừu tượng trong các nhà xây dựng bản sao của Vật chất? Đó là, tôi muốn các giá trị của bất cứ điều gì m._color có thể là (một màu, một Texture) để được sao chép, không chỉ là con trỏ đến IColor.
Tại sao lưu con trỏ trên IColor sẽ vô hiệu hóa bản sao sâu? –
Bởi vì theo mặc định nó sẽ chỉ sao chép địa chỉ con trỏ vào địa chỉ con trỏ được sao chép. Nó sẽ không sao chép những gì đang được trỏ đến và sau đó điều chỉnh lại con trỏ. Luke có gợi ý tốt nhất trong việc tạo ra một hàm clone() được gọi từ hàm tạo bản sao. –