계속 이동 의미론이 애매해서 정리하고 갑시다
이동은 말 그대로 이동이라 복사가 일어나지 않고 포인터가 이동하는 느낌으로 데이터가 이동됨
swap 함수의 경우도 복사 복사 하는 것보다
move를 이용하여 단순 이동 시켜주는 것이 좋다
리턴값 최적화, 이름 있는 리턴값 최적화도 다시 보고 갑시다
C++11이후 이동 의미론의 도입으로 RVO, NRVO가 적용되지 않더라도 이동 연산자가 호출될 수 있다.
이들은 복제 생략으로서 컴파일러는 함수에서 리턴하는 객체를 복제하거나 이동시킬 필요가 없음
영복제 값 전달 의미론을 구현할 수 있다.
주의할 것
객체를 리턴하는대 move()를 사용한다면?
return object;
return move(object);
둘다 컴파일러는 우측값 표현식으로 취급한다.
하지만 move()를 사용하면 컴파일러는 RVO NRVO를 적용하지 않음
복제가 되어 성능에 큰 타격
# 함수에서 로컬 변수나 매개변수를 리턴할 때는 move()를 사용하지 말고 그냥 return object;로 작성
9.2.5 영의 규칙
다섯 가지 특수 멤버 함수를 구현할 필요가 없도록 클래스를 디자인해야 한다는 규칙
9.3.1 static 메서드
객체 단위가 아닌 클래스 단위로 적용하는 메서드
특정 객체에 대해 호출되지 않기 때문에 this 포인터를 가질 수 없다
비 static 멤버에 접근하는 용도로 호출할 수 없다
9.3.2 const 메서드
값이 바뀌지 않는 객체
객체나 객체의 레퍼런스, 포인터에 const를 붙이면 그 객체의 데이터 멤버를 절대 변경하지 않는다고 보장하는 메서드만 호출할 수 있다.
#그와중에 멤버에 mutable를 붙이면 const 객체의 멤버라도 값을 수정할 수 있음
9.3.3 메서드 오버로딩
이름은 같고 매개변수 타입이나 개수만 다름. 오버로딩
~464p
'전문가를 위한 C++' 카테고리의 다른 글
2025/03/10 ch.10 상속 활용하기 (0) | 2025.03.10 |
---|---|
2025/03/08 ch.09 클래스와 객체 완전 정복 (0) | 2025.03.08 |
2025/03/06 ch.09 클래스와 객체 완전 정복 (0) | 2025.03.06 |
2025/03/05 ch.08 클래스와 객체 이해 (0) | 2025.03.05 |
2025/03/04 ch.07 전문가답게 C++ 코딩하기 (0) | 2025.03.04 |