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