C++:返回本地对象,但不能正常工作

C++: Returns a local object but doesn't work well

本文关键字:常工作 工作 但不能 返回 对象 C++      更新时间:2023-10-16

好几年没有使用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局部对象将被复制到外部变量中,对吗?如何优化此代码?

  1. 而不是const char *使用char *std::string
  2. 缺少复制构造函数或需要使用std::move
  3. sub用于同一函数中的函数名称和变量名称。