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

时间:2019-12-08 03:44:59

标签: c++

好几年没有使用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 %d\n", 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("%s\n", sub.data());
  return s;
}

我期望Slice::sub返回一个有效的Slice,但事实证明外部调用者无法获得正确的值(似乎sub.data_被释放了)。

我认为返回的sub本地对象将被复制到外部变量,对吗?如何优化此代码?

1 个答案:

答案 0 :(得分:0)

  1. 使用$ps.Runspace.AddArgument($remoteComputer)const char *代替char *
  2. 缺少复制构造函数或需要使用std::string
  3. std::move用于同一函数中的函数名和变量名。