构造一个不分配的字符串
Construct a string without allocation
考虑到我们有一个带有 char * 成员的结构,如果我们想请求这个成员的内容,我们通常会这样做
char const * get_member() { return object.member; }
这样,我们只返回一个指针,没有任何分配。
如果现在我们想返回一个字符串;是否可以让字符串只使用该指针,而不是复制内容并构造一个新的字符串对象?
string const & get_member() { return object.member; }
上面的代码将进行内存分配。 与char const *
方法相比,这种方法会做哪些额外的工作?
不,这是不可能的。 std::string
始终分配自己的内存,并且无法获得预先存在的缓冲区的所有权。
您可以返回指针的副本,也可以首先使用 std::string
成员,然后返回对它的引用。或者,返回可与char*
或std::string
成员一起使用的std::string_view
。字符串视图仅在 C++17 起可用,但它也存在于标准库扩展中,一些用于早期编译器,并且还存在非标准实现。
该结构来自一些基于C代码的库,只想用C++包装,同时,不要杀死任何性能。
那么返回std::string
似乎不是一个合适的设计。
相关文章:
- 用字符串的向量分配字符串向量
- 在C++中动态分配字符串数组
- 分配字符串uint8_t
- 如何分配字符串来提升野兽multi_buffer
- 分配字符串时EXCEPTION_ACCESS_VIOLATION
- 使用带有动态分配字符串的strcpy_s()和strcat_s()
- 如何分配字符串文本
- C 循环不重新分配字符串值
- 如何在C 中分配字符串数组
- 动态内存分配 C++ 字符串
- 如何存储可以分配字符串的数值
- 通过引用传递结构并分配字符串
- 动态分配字符串文字
- 分配字符串数组时出现分段错误
- 如何从 Arduino 的 C++ 类中的构造函数中分配字符串字段
- 动态分配 C 字符串内存,无需先询问用户输入时间
- 分配字符串时出现 char* 新建和删除 [] 错误
- C++正在记住指向已分配字符串的指针
- 在结构中分配字符串时出现 Seg 错误
- 指向字符串的指针,可用于动态分配字符串数组