我想将复制构造函数添加到具有抽象类型成员的类中。
在这种情况下,抽象成员是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类的,但它也可以是来自任何其他第三方库的抽象类。