[英]Calling Base Class Copy Constructor in Derived Class
只是作为序言,我在发布之前做了很多阅读,因为我知道这可能是一个非常基本的问题,但是我仍然缺少一些东西,所以如果这样做了,请提前抱歉...
我有一个基于另一个类的模板派生类:
class BaseBuffer
{
public:
// Constructor
BaseBuffer() {};
BaseBuffer(long buf_size);
BaseBuffer(const BaseBuffer& orig);
....
template <class T>
class DataBuffer : public BaseBuffer
{
....
我正在实现DataBuffer
的副本构造函数。 我已经为BaseBuffer
编写了复制构造函数,如上所示。
现在,据我所知,要在复制DataBuffer
调用BaseBuffer
的副本,我必须
DataBuffer(const DataBuffer& orig) : BaseBuffer(orig)
{
// Initialize an array of memory given the type
buf_ = new T[size_];
....
另一个SO答案指出, BaseBuffer(orig)
应该在其中“这将调用Base子对象上的Base复制构造函数。”
当我不这样做时,就会发生预期的坏事情:不会复制属于BaseBuffer
所有属性。
当我这样做时,发生了意外的坏事:当代码到达调用BaseBuffer(orig)
的地步时,我得到了EXC_BAD_ACCESS。
所以这对我来说是有意义的,也没有意义。 由于DataBuffer
是从BaseBuffer
继承的,所以可以调用BaseBuffer
复制构造函数是有意义的,它只会“查找”它所知道的内存位置,并且所有DataBuffer
多余内容都“适合”该基数。
但另一方面,严格来讲,调用BaseBuffer(&<DataBuffer>)
似乎没有道理,因为我仅定义了BaseBuffer(&<BaseBuffer>)
。
所以我的问题分为两个部分,
DataBuffer(const DataBuffer& orig) : BaseBuffer(orig) {...}
语法(如果不正确,对不起)? 先感谢您。
底线:我错了。
大家都说过,语法
DataBuffer(const DataBuffer& orig) : BaseBuffer(orig) {...}
是正确的,并且错误在我的代码的其他地方。 就我而言,我试图在对象初始化之前复制它。 很抱歉浪费大家的时间。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.