我想知道是否有某种方法告诉std::string
发布它正在使用的char*
。
我想在std::string
的某个地方它有char*
类型的字段,我想要一些类似的方法:
const char* std::string::release() {
const char* result = __str;
__size = 0;
__capacity = INITIAL_CAPACITY_WHATEVER;
__str = new char[INITIAL_CAPACITY_WHATEVER];
return result;
}
不是复制内容是一个问题或影响我的表现,我只是在浪费时间复制我刚刚删除的内容时感到不舒服。
答案 0 :(得分:2)
如果您正在使用C ++ 11,则可以将std::move
move the contents的一个字符串对象用于另一个字符串对象。这避免了复制的开销。
std::string s1 = "hello";
std::string s2(std::move(s1));
但是,您无法直接取消内部char*
缓冲区与std::string
实例的关联。 std::string
对象拥有内部char*
缓冲区,并在调用析构函数时尝试解除分配它。