2013-08-06 2 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이다 정의 r- 수치 (C++ §2.14.7p1 11)가있다. 다른 rvalue 리터럴을 std::move (예 : std::move(3) 또는 std::move(true))으로 전달한 경우와 마찬가지로 효과가 없습니다.

1

모든 POD 유형에 대해 std :: move를 사용하면 이점이 없으며 포인터는 POD 유형입니다. std::move을 사용하면 일부 데이터를 복사하는 대신 이동시킬 수 있습니다. 예를 들어, std::movestd:string을 다른 어레이에 복사하면 전체 어레이가 복사되는 대신 기본 저장소에 대한 포인터가 복사됩니다. 그러나 포인터 값이 계속 복사되고 있음에 유의하십시오. 따라서 작업하려는 모든 것이 포인터 인 경우 std::move에는 이점이 없습니다. 포인터가 null인지 여부는 중요하지 않습니다.

관련 문제