剛纔我發現我注意到std::string
的substr
操作對於rvalues來說可能更有效率,因爲它可以從*this
盜取分配的內存。可以std ::字符串重載「substr」爲rvalue * this並竊取資源?
N3225的標準庫中包含的std::string
basic_string substr(size_type pos = 0, size_type n = npos) const;
下面的成員函數聲明,可以實現對右值的優化substr
重載和實現可以提供兩個版本,其中一個可以重用的緩衝區右值字符串?
basic_string substr(size_type pos = 0) &&;
basic_string substr(size_type pos, size_type n) const;
我想象右值版本可以實現如下的*this
一個設置*this
存儲器重用到移動-從狀態。
basic_string substr(size_type pos = 0) && {
basic_string __r;
__r.__internal_share_buf(pos, __start + pos, __size - pos);
__start = 0; // or whatever the 'empty' state is
return __r;
}
這是否以一種有效的方式在常用字符串實現上工作,還是會花費太多內務管理?
不會泄漏內存嗎?畢竟,我們只是在竊取內存的一部分,而不是整塊...... – 2011-02-16 21:43:09
@Konrad我們需要記住我們在竊取內存,釋放內存時我們需要將它抵消到原點。 – 2011-02-16 21:44:51