【发布时间】:2021-08-04 09:11:51
【问题描述】:
#include <string>
using namespace std::literals;
int main()
{
auto str = std::string{};
str.resize(1024);
// #1
str = {};
// #2
str = "";
// #3
str = ""s;
// #4
str.clear();
// #5
str.resize(0);
str.shrink_to_fit();
}
清除 std::string 对象的首选方法是什么?为什么?
【问题讨论】:
-
这些语句是否会导致为每个语句发出不同的汇编代码?你第一次检查了吗?
-
shrink_to_fit有点不同,它会删除任何未使用的容量。显然,clear也可以做到这一点,但大多数实现都没有:“与std::vector::clear不同,C++ 标准没有明确要求此函数不改变容量,但现有实现不会改变容量。这意味着它们不会释放分配的内存。” (cppreference) -
我相信这个上下文需要“清除它后你想做什么”才能完成。或者它的任何工作方式都应该没问题。
-
我的意思是,如果有一个字面上称为
clear的函数,你会认为这是clear 字符串的首选方式...
标签: c++ memory-management resources c++17 idioms