![](/img/trans.png)
[英]C++: Execution of programm(constructors, destructors, assignment operators, etc)
[英]How does std::swap work in terms of constructors, assignment operators, and destructors?
如果我有T a
和T 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.