クラス 文字列{ チャー *のデータ。 公共: 文字列(CONST のchar * P){ size_tのサイズ = STD :: STRLEN(P)+ 1 。 データ = 新しい 文字[サイズ]。 } 〜文字列(){ 削除[]データ。 } 文字列(constの 列&こと){ size_tのサイズ = STD :: STRLEN(that.data)+ 1 。 データ = 新しい 文字[サイズ]; std :: memcpyの(データ、that.data、サイズ); } /// セマンティック移動、すなわち、そのデータ渡す右辺値である 文字列(ストリングその&&) // 文字列を&&列に右辺値参照である { データ = that.data。 that.data = nullptr; } }。
あなたが呼び出したい場合は、可能性があるためつまり&&なぜ一つは、文字列を使用することです:
列(X)
列(X + Y)
文字列(列A)
左の値は、どんなにコピーのより深い一種なので、正しい値との直接交換は、左の値よりも速くなりません場合