如果我有 T a
和 T b
并且我调用了 std::swap(a, b)
,那么顺序是什么调用的复制构造函数、赋值运算符和析构函数?
最佳答案
没有“强制”的特定顺序,这完全取决于所使用的标准库提供的实现。
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
,因为它们可以提供更好或更高效的实现;自定义类型可以做同样的事情。在这些特化中,可能或将会发生更多的变化。
关于c++ - std::swap 在构造函数、赋值运算符和析构函数方面如何工作?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25529334/