0

std::string使用しているを解放するように指示する方法があるかどうか疑問に思っていましchar*た。

のどこかにstd::stringtype のフィールドがあるchar*と思いますが、そのようなことを行うメソッドが必要でした:

const char* std::string::release() {
    const char* result = __str;
    __size = 0;
    __capacity = INITIAL_CAPACITY_WHATEVER;
    __str = new char[INITIAL_CAPACITY_WHATEVER];
    return result;
}

コンテンツのコピーが問題になったり、パフォーマンスに影響を与えたりするわけではありません。後で削除しようとしているものをコピーして時間を無駄にすることに不快感を感じていました。

4

1 に答える 1

2

C ++ 11を使用している場合は、を使用して、ある文字列オブジェクトの内容を別の文字列オブジェクトにstd::move移動できます。これにより、コピーのオーバーヘッドが回避されます。

std::string s1 = "hello";
std::string s2(std::move(s1));

char*ただし、のインスタンスから内部バッファの関連付けを直接解除することはできませんstd::stringstd::stringオブジェクトは内部バッファを所有しchar*ており、デストラクタが呼び出されたときに割り当てを解除しようとします。

于 2013-02-07T01:04:14.600 に答える