Joh*_*hny 4 c++ abstract-class copy-constructor
在具有纯虚方法的类中或仅在派生类中定义复制构造函数/ operator =是否有意义?
如果它是您计划复制的对象,是的,这是一个好主意。如果不是,请参阅下面的评论。
如果您的虚拟基类依赖于需要显式分配和复制的资源(缓冲区、操作系统对象等),则定义复制构造函数可以省去在每个派生类中单独这样做的麻烦(此外,如果这些基础资源是私有的,使用公共继承,你就不能这样做)。
例如:
class Base {
public:
Base( const Base & );
virtual ~Base();
virtual void Method() = 0;
// etc...
private:
int *memberIntArray;
int length;
// etc...
};
class DerivedOne : public Base{
public:
DerivedOne( const DerivedOne & );
virtual ~DerivedOne();
virtual void Method();
// etc...
protected:
// data, etc...
};
class DerivedTwo : public Base{
public:
DerivedTwo( const DerivedTwo & );
virtual ~DerivedTwo();
virtual void Method();
// etc...
protected:
// data, etc...
};
///////////////////
Base::Base( const Base & other ) {
this->length = other.length;
this->memberIntArray = new int[length];
memcpy(this->memberIntArray,other.memberIntArray,length);
}
//etc...
DerivedOne::DerivedOne( const DerivedOne & other )
: Base( other )
{
//etc...
}
DerivedTwo::DerivedTwo( const DerivedTwo & other )
: Base( other )
{
//etc...
}
Run Code Online (Sandbox Code Playgroud)
如果它只有纯虚方法(并且没有数据成员)那么,不,合成的一个很好(并且不会做任何事情).
如果它确实有数据成员那么你应该定义你自己的复制构造函数if/when什么时候这样做,就像任何其他类一样.派生类与它没有多大关系.
| 归档时间: |
|
| 查看次数: |
11190 次 |
| 最近记录: |