拷贝构造函数:深复制一个抽象类(Copy constructor: deep copying an

2019-08-16 23:37发布

假设我有以下的(简单情况):

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);
}

现在,有没有办法为我做抽象的iColor的深层副本在材料的拷贝构造函数? 也就是说,我想任何的可能m._color是(颜色,纹理)的值复制,而不仅仅是指针的iColor。

Answer 1:

看看虚拟构造函数用法



Answer 2:

你可以添加一个克隆()函数的接口。



Answer 3:

你必须将自己添加该代码材质拷贝构造函数。 然后代码来释放你的析构函数中分配的iColor。

你还需要一个虚拟的析构函数添加到ICOLOR。

自动做一次深层副本的唯一方法是存储颜色,而不是直接的指针ICOLOR。



Answer 4:

添加clone()方法,以颜色可能是最好的,但如果你没有这样的选择,另一种解决方案是使用dynamic_cast的投ICOLOR *为颜色*。 然后,你可以调用颜色拷贝构造函数。



文章来源: Copy constructor: deep copying an abstract class