好几年没有使用C++了,这可能是一个微不足道的问题:
class Slice {
private:
size_t n_ = 0;
const char* data_;
public:
Slice() = default;
Slice(const char* data, size_t n) : data_(data), n_(n) {}
Slice(const char* s): data_(s), n_(strlen(s)) {}
Slice(const std::string& s): data_(s.data()), n_(s.size()) {
// printf("%s %dn", data_, n_);
}
~Slice() = default;
}
Slice Slice::sub(int start, int len) const {
assert(start + len < n_);
auto sub = std::string(this->data_ + start, len);
Slice s(sub);
printf("%sn", sub.data());
return s;
}
我期待Slice::sub
返回一个有效的 Slice,但事实证明外部调用者无法获得正确的值(似乎sub.data_
以某种方式被释放(。
我以为返回的sub
局部对象将被复制到外部变量中,对吗?如何优化此代码?
- 而不是
const char *
使用char *
或std::string
。 - 缺少复制构造函数或需要使用
std::move
。 sub
用于同一函数中的函数名称和变量名称。