Arcen's Blog

アクセスカウンタ

zoom RSS [C++0x]rvalue reference(3)

<<   作成日時 : 2011/03/24 10:15   >>

ブログ気持玉 0 / トラックバック 0 / コメント 0

互換性を保障するための実装方法。

1.コピーコンストラクタと代入は必要により提供する。
2.テンプレートでのコンストラクタや代入はマクロなどで判定して、C++0xの機能が有効の場合だけ定義する。

しかし、g++(4.4.4-14ubuntu5)ではstd::stringなどのコンテナでのコンストラクタでrvalueサポートがまだ実装されておらず、ムーブではなく、コピーになっていた。

処理速度の面からは、コンストラクタでswapしてもよい。但し、dataのデフォルトコンストラクタは実行される。
もしくは、g++はサポートされ次第、高速化されると考えて、とりあえず、無視しておくか。

C++0xはまだ固まってないし、使うのは時期尚早なのか?


template<typename T,typename V>
void forward(T&t,V&&v) { if ( std::is_lvalue_reference<V>::value ) t = v; else t.swap(v); }
class A {
std::string data;
public:
A(){}
A(const A&a) : data(a.data) {}//コピー
A(A&&a) { data.swap(a.data); }//ムーブ
template<typename T> A(T&&t) { forward(data,std::forward<T>(t).data); }//外部関数でコピーかムーブ
};

テーマ

関連テーマ 一覧


月別リンク

ブログ気持玉

クリックして気持ちを伝えよう!
ログインしてクリックすれば、自分のブログへのリンクが付きます。
→ログインへ

トラックバック(0件)

タイトル (本文) ブログ名/日時

トラックバック用URL help


自分のブログにトラックバック記事作成(会員用) help

タイトル
本 文

コメント(0件)

内 容 ニックネーム/日時

コメントする help

ニックネーム
本 文
[C++0x]rvalue reference(3) Arcen's Blog/BIGLOBEウェブリブログ
文字サイズ:       閉じる