C++中StringPiece了解

转自:https://blog.csdn.net/zxpoiu/article/details/117258047

1.介绍

使用c++ string类不可避免会带来很多不必要的拷贝,拷贝多了必然影响性能。因此在很多高性能C++框架的实现中,都会使用StringPiece类作为string类的wrapper,该类只持有目标字符串的指针,而避免额外的拷贝

class StringPiece {
 private:
  const char *ptr_;// 被定义为const类型,其不允许任何修改
  int length_;

 public:
  // We provide non-explicit singleton constructors so users can pass
  // in a "const char*" or a "string" wherever a "StringPiece" is
  // expected.
  StringPiece() : ptr_(NULL), length_(0) {}
  StringPiece(const char *str)
      : ptr_(str), length_(static_cast<int>(strlen(ptr_))) {}// 自动设置长度
  StringPiece(const unsigned char *str)
      : ptr_(reinterpret_cast<const char *>(str)),
        length_(static_cast<int>(strlen(ptr_))) {}
  StringPiece(const std::string &str)
      : ptr_(str.data()), length_(static_cast<int>(str.size())) {}
  StringPiece(const char *offset, int len) : ptr_(offset), length_(len) {}
...
};

StringPiece不控制字符串的生命周期,字符串操作都是常数时间复杂度。

void clear() {
  ptr_ = NULL;  // 在操作时只需要修改指针指向就可以,没有释放空间的操作
  length_ = 0;
}
void set(const char *buffer, int len) {
  ptr_ = buffer;
  length_ = len;
}

 

posted @ 2024-04-28 23:50  lypbendlf  阅读(40)  评论(0编辑  收藏  举报