仅作为序言,我在发帖之前做了很多阅读,因为我知道这可能是一个非常基本的问题,但是我仍然缺少一些内容,因此如果这样做了,请提前抱歉...
我有一个基于另一个类的模板派生类:
class BaseBuffer
{
public:
// Constructor
BaseBuffer() {};
BaseBuffer(long buf_size);
BaseBuffer(const BaseBuffer& orig);
....
template <class T>
class DataBuffer : public BaseBuffer
{
....
我正在为DataBuffer
实现副本构造函数。如上所述,我已经为BaseBuffer
编写了复制构造函数。
据我所知,现在要在复制BaseBuffer
时调用DataBuffer
的副本,我必须这样做
DataBuffer(const DataBuffer& orig) : BaseBuffer(orig)
{
// Initialize an array of memory given the type
buf_ = new T[size_];
....
其中BaseBuffer(orig)
应该作为另一个S.O.回答说:“这将在Base子对象上调用Base复制构造函数。”
当我不这样做时,就会发生预期的坏事:不会复制属于BaseBuffer
的所有属性。
这样做时,会发生意外的坏事:当代码到达调用BaseBuffer(orig)
的地步时,我得到EXC_BAD_ACCESS。
所以这对我来说是有道理的。由于DataBuffer
是从BaseBuffer
继承而来的,因此我可以调用BaseBuffer
复制构造函数,并且它只会“查找”它知道的内存位置以及所有{{ 1}}多余的东西“适合”了基地。
但另一方面,严格来说,调用DataBuffer
似乎没有任何意义,因为我仅定义了BaseBuffer(&<DataBuffer>)
。
所以我的问题分为两部分,
BaseBuffer(&<BaseBuffer>)
语法(如果不正确,对不起)?谢谢。
答案 0 :(得分:0)
底线:我弄错了。
每个人都说语法
DataBuffer(const DataBuffer& orig) : BaseBuffer(orig) {...}
是正确的,并且错误在我的代码的其他地方。就我而言,我试图在对象初始化之前复制它。很抱歉浪费大家的时间。