2013-02-07 83 views
0

我想知道是否有某種方法可以告訴std::string版本它正在使用的char*從std :: string中提取const char而不復制?

我想像它有char*類型的字段的std::string某處,我想一些會以類似的東西的方法:

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

不就是抄襲內容是問題還是會影響我表演,我只是在浪費時間來複制我剛剛要刪除的內容而感到不舒服。

+2

不,沒有,除了將它移動到另一個'std :: string'。你爲什麼需要這個?爲什麼你不能只用'c_str()'? –

+0

@BenjaminLindley我不需要。我只是想知道。 –

+0

@BenjaminLindley:每當我看到像這樣的東西,我的第一個想法是「C API /互操作」。也許他需要將'char **'傳遞給可能重新分配它的函數? –

回答

2

如果您使用的是C++ 11,則可以將一個字符串對象的std::movemove the contents用於另一個字符串對象。這可以避免複製的開銷。

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

但是,你不能直接從std::string實例撇清內部char*緩衝區。 std::string對象擁有內部的char*緩衝區,並且將在調用析構函數時試圖釋放它。

相關問題