2013-08-06 12 views
10

私は以下を見つけました。 nullptrで動くことに利点はありますか?私はそれが基本的にノード*に0を割り当てると仮定しているので、ここで移動を行う利点があるかどうかはわかりません。何かご意見は?nullptrの割り当てでstd :: moveを使うべきでしょうか?

template <typename T> 
struct Node 
{ 
    Node(const T& t): data(t), next(std::move(nullptr)) { } 
    Node(T&& t): data(std::move(t)), next(std::move(nullptr)) { } 

    T data; 
    Node* next; 
}; 

答えて

19

nullptrのでstd::move(nullptr)nullptrで、定義右辺値(C++ 11§2.14.7p1)によるものです。他の任意のリテラルリテラルをstd::moveに渡す場合と同じように、例えばstd::move(3)またはstd::move(true)のように効果はありません。

1

PODタイプに対してstd :: moveを使用する利点はなく、ポインタはPODタイプです。 std::moveを使用すると、一部のデータをコピーするのではなく移動することができます。たとえば、std::movestd:stringを別のアレイにコピーすると、コピーされるアレイ全体ではなく、基礎となるストレージへのポインタがコピーされます。しかし、ポインタ値がまだコピーされていることに注意してください。したがって、あなたが作業しているのがポインタであれば、std::moveには利点がありません。ポインタがnullであるかどうかは関係ありません。

関連する問題