[英]c_str implemenation for String class
我正在阅读Accelerated C ++书中有关实现string
类的第12章。
有一个实现c_str()
函数的章尾问题。 我正在寻找一些想法。
这是我到目前为止的内容:
我的第一个尝试是堆分配 char *
并返回它。 但这会导致内存泄漏:
cost char * c_star() const {
//cannot get reference to result later
//causes memory leaks
char* result = new char[data.size() + 1];
std::copy(data.begin(), data.end(), result);
result[data.size()] = '\0';
return result;
}
这是另一种尝试:
const char* c_str() const {
//obviously incorrect implementation as it is not NUL('\0') terminated.
return &data[0];
}
我不能push_back '\\0'
到数据,因为它不应更改数据。
这是规格 :
返回一个指向数组的指针,该数组包含一个以空值终止的字符序列(即C字符串),代表字符串对象的当前值。
这是书的实现:(重命名为Str
)。 在内部,字符存储在矢量实现(Vec)中。
class Str {
public:
.
.
.
private:
Vec<char> data;
};
基于这些注释,我实现了Str类,以确保每个字符串的末尾都有一个NUL('\\ 0')。 我将向量存储在字符数组中,而不是向量:
class Str {
public:
typedef char* iterator;
typedef const char* const_iterator;
.
.
.
//c_str return a NUL terminated char array
const char* c_str() const { return str_beg; };
//c_str and data are same as implementation make sure there is NUL
//at the end
const char* data() const { return str_beg; };
.
.
.
private:
iterator str_beg;
.
.
.
};
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.