C++:返回本地对象,但不能正常工作
C++: Returns a local object but doesn't work well
好几年没有使用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
用于同一函数中的函数名称和变量名称。
相关文章:
- QSqlquery prepare()和bindvalue()不工作
- 导入库可以跨dll版本工作吗
- 以螺旋方式打印矩阵的程序.(工作不好)
- 对象指针在c++中是如何工作的
- 为什么在Windows上的VS 2019和Clang 9中"size_t"在没有标题的情况下工作
- VSOMEIP-2个设备之间的通信(TCP/UDP)不工作
- 为字符串中每 N 个字符插入空格的函数没有按照我认为的方式工作?
- C++为线程工作动态地分割例程
- 为什么我的 std::ref 无法按预期工作?
- 布尔比较运算符是如何在C++中工作的
- SampleConsensusPrerejective(ext.RANSAC)是如何真正工作的
- 不确定要在我的main中放入什么才能使我的代码正常工作
- 为什么std::condition_variable notify_all的工作速度比notify_one快(对于随机请
- <<操作员在下面的行中工作
- 有人能解释一下为什么下界是这样工作的吗C++的
- ExtractIconEx:可以工作,但偶尔会崩溃
- C++中的memset函数工作不正常
- 当我在第一个循环中使用"auto"时,它工作正常,但是使用"int"它会给出错误,为什么?
- 为什么STD ::计数将常数传递给Lambda,而不是在弦上工作时而不是字符
- C++程序已停止工作-求解常微分方程