从std :: string中提取const char而不复制?

时间:2013-02-07 01:01:06

标签: c++ string std

我想知道是否有某种方法告诉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;
}

不是复制内容是一个问题或影响我的表现,我只是在浪费时间复制我刚刚删除的内容时感到不舒服。

1 个答案:

答案 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*缓冲区,并在调用析构函数时尝试解除分配它。