MemRef是一個簡單的類,指向一些它不擁有的內存。在派生類的構造函數中初始化超類
基類:
class MemRef {
protected:
const char * _ptr;
std::size_t _len;
public:
// Constructors
MemRef() : _ptr(0), _len(0) {}
MemRef(const string& s) : _ptr(s.c_str()), _len(s.length()) {}
MemRef(const char* b, size_t l) : _ptr(b), _len(l) {}
};
Loaded_MemRef是提供自己的緩衝區,當主叫方不能信任,可提供內存仍然是MemRef的壽命分配和不變的子類。 Loaded_MemRef將數據複製到它控制的祕密緩衝區,然後指向它,讓我把它看作一個普通的MemRef。
派生類:
class Loaded_MemRef : public MemRef {
private:
const string _memory;
public:
Loaded_MemRef(const string& s) : ??? {}
Loaded_MemRef(const char*);
Loaded_MemRef(const char*, const size_t);
};
我無法創建構建函數爲Loaded_MemRef。我必須複製到_memory調用者提供的內存第一個,之前致電MemRef的ctor;否則MemRef無法檢索有效的_memory.c_str()。但我的理解是,在我初始化Loaded_MemRef的成員之前,必須先訪問MemRef(_memory)。所以,我想這一點:
Loaded_MemRef(const string& str) :
MemRef(), // get this over with
_memory(str), // copy str into _memory
MemRef::_ptr(_memory.c_str()), // (LINE 108) "reach up into" MemRef and set its protected members
MemRef::_len(_memory.length())
{}
這抱怨:
MemRef.cpp: In constructor 'Loaded_MemRef::Loaded_MemRef(const std::string&)':
MemRef.cpp:108: error: expected class-name before '(' token
MemRef.cpp:108: error: expected '{' before '(' token
(108線以上表示;下一行,設置_len,沒有得到標記,雖然也許編譯器保釋。 )
什麼是對這樣做的方法是什麼?
爲什麼'Loaded_MemRef'這種怪異的構造函數? –
@KerrekSB:一個用於字符串引用,一個用於空終止的C字符串,一個用於緩衝區(無空終止,需要長度)。 – Chap