(할당 연산자의 구현) 스왑은 다음과 같습니다사용 : 나는 어떤 장소에서 클래스 행렬의 assignemt 연산자의 구현을 본
class Matrix
{
private:
int rows;
int cols;
int **mat;
public:
Matrix& operator=(const Matrix& m)
{
if (this != &m)
{
Matrix temp(m);
std::swap(temp.rows, rows);
std::swap(temp.cols, cols);
std::swap(temp.mat, mat);
}
return *this;
}
}
을 지금, 나는가 스왑 기능을 사용한다고 가정 그 문제, 글을 쓰지 않고 그것을 사용하는 다른 방법은 무엇입니까 std:swap
? 이 경우 두 매트릭스의 스왑을 구현하는 친구 기능을 구축한다고 생각합니까?
이것은 올바르게 보이지 않습니다. 참조 및 스왑으로 전달하지 않는 [복사 및 스왑] (https://stackoverflow.com/questions/3279543/what-is-the-copy-and-swap-idiom)이어야합니다. – NathanOliver
@NathanOliver : @NathanOliver : 빠른 견해에서 기능적으로 동일해야하며 자체 할당을 확인한 후에 만 사본을 수행합니다 (정확성은 필요하지 않지만 작은 추가 최적화로 보일 수도 있고 공통점의 비관적 인 것으로 볼 수도 있음). 케이스). 그래도 정당한 이유가없는 한 더 많은 코드 (4 줄과 2 개의 토큰)가 필요합니다. –
@MatteoItalia 기능상으로 동일하지 않습니다. 복사 및 스왑에서 임시 복사본의 헛소리를 훔칩니다. 참조로 전달하면 객체 자체의 내장을 훔쳐 내며이 경우 실제로는 'const'이므로 실제로 작동하지 않습니다. – NathanOliver