[英]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.