T a
및 T b
이 있고 std::swap(a, b)
을 호출하는 경우 호출되는 생성자, 할당 연산자 및 소멸자의 순서는 무엇입니까? T
에 대한 전문성이없는 경우std :: swap은 생성자, 할당 연산자 및 소멸자와 관련하여 어떻게 작동합니까?
2
A
답변
4
"필수"인 특정 순서는 없으며, 모두 사용중인 표준 라이브러리가 제공하는 구현에 따라 달라집니다.
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
에 전문 않는 그들이 할 수 있기 때문에 보다 우수하거나 효율적인 구현을 제공한다. 사용자 정의 유형이 동일하게 수행 할 수 있습니다. 이러한 전문 분야에서는 더 많은 변형이 발생할 수 있거나 발생할 수 있습니다.
3
, 다음 일반 버전은 더 함께 등 내부 포인터를 교환한다 전문화가있을 수 있습니다 (예 : 용기 등)
{
T t = std::move(a); // move construction
a = std::move(b); // move assignment
b = std::move(t); // move assignment
} // destruction of t
일부 유형의 라인을 따라 뭔가를 할 것 임시 오브젝트 및 오브젝트 지정 없음.
'T'가 무엇인가에 달려 있습니다. – quantdev
어떻게 그렇게됩니까? 어떤 유형의'T'라는 두 개의 일반 객체를 교환하는 데 사용되는 표준 방법이 없습니까? – roscioli
나는 많은 전문화가있을 수 있으며, 아마도 사용자 정의 된 전문화가 가능하다는 것을 의미했다. – quantdev