簡體   English   中英

std :: swap如何在構造函數,賦值運算符和析構函數方面起作用?

[英]How does std::swap work in terms of constructors, assignment operators, and destructors?

如果我有T aT b並調用std::swap(a, b) ,則調用的復制構造函數,賦值運算符和析構函數的順序是什么?

如果T沒有專門化,那么通用版本將按照

{
    T t = std::move(a);  // move construction
    a = std::move(b);    // move assignment
    b = std::move(t);    // move assignment
}                        // destruction of t

某些類型(例如容器)可能具有專門化,將交換內部指針等,而沒有臨時對象且沒有對象分配。

沒有“強制性”的特定命令,這完全取決於所使用的標准庫提供的實現。

std::swap C ++ 03變體為:

template<typename T>
void swap(T& a, T& b) {
    T temp(a); // copy
    a = b;     // assign
    b = temp;  // assign
}

C ++ 11實現為:

template<typename T>
void swap(T& a, T& b) {
    T temp = std::move(a); // move copy or normal copy (moves if moveable)
    a = std::move(b);      // move or assign
    b = std::move(temp);   // move or assign
}

幾個std容器等確實專注於swap因為它們可以提供更好或更有效的實現。 自定義類型可以做到這一點。 在這些專業領域,甚至可能還會發生更多變化。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM