轉自: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; }