使用C ++中的抽象成员复制类的构造函数

时间:2014-03-12 18:29:40

标签: c++ constructor directx abstract-class copy-constructor

我想将复制构造函数添加到具有抽象类型成员的类中。

在这种情况下,抽象成员DirecX::ID3D11Buffer * buffer,我在构造函数之后在我的类中初始化,采用separete方法init()

bool Model::init(){ //create the constant buffer
    D3D11_BUFFER_DESC bd;
    ZeroMemory(&bd, sizeof(bd));
    bd.Usage = D3D11_USAGE_DEFAULT;
    bd.ByteWidth = sizeof(ConstantBufferStructure);
    ...
    return device->CreateBuffer(&bd, NULL, &constantBuffer) == S_OK;
}

我在调用方法init()之前调用方法render(),但是在构造函数之后不是 - 我选择了它的最佳时刻,因此它不会减慢程序的速度。

我试着像这样编写复制构造函数:

class Model: virtual public SomeClassesNotImportantHere...{
    protected: 
        bool visible;
        ID3D11Buffer * constantBuffer; //per object constant buffer

    public:
        Model(){
            visible = true;
        }

        Model& operator=(const Model &other){
            visible = other.visible;
            constantBuffer = new ID3D11Buffer(*constantBuffer);
            return *this;
        }

        Model& operator=(const Model &other) : visible(other.visible){
            constantBuffer = new ID3D11Buffer(*constantBuffer);
            return *this;
        }

        bool init(){...}
        ...
};

但是在行中:

constantBuffer = new ID3D11Buffer(*constantBuffer);

我收到错误:

error C2259: 'ID3D11Buffer' : cannot instantiate abstract class

我的问题是:

如何制作该抽象成员的深层副本?

不能,我不应该修改Direct::ID3D11Buffer 类。

我想制作一个深层的对象副本(制作指向对象的副本,而不是指针的值)。

就我而言,它是关于Direct类的,但它也可以是来自任何其他第三方库的抽象类

0 个答案:

没有答案