티스토리 뷰
면접대비용으로 정리한거라 남들이 보기에 다소 두서 없을 수 있음 참고바람
1. 이동 시맨틱은 이동 생성자, 이동 대입 연산자를 통해 지원함.
이동 생성자, 이동 대입 연산자는 원본 객체 --> 새로운 객체로 복사 --> 원본 null로 초기화 의 과정이다.
즉 객체에 대한 메모리 소유권을 이동함. 그 결과 댕글링 포인터나, 메모리 릭 발생을 예방함.
2. 이동 시맨틱은 r-value 참조로 구현됨.
내가 어떤 클래스를 구현했고, 그 클래스가 이동 시맨틱으로 동작하게 하려면 위에서 언급한
1
2
3
4
5
6
|
class LiverPool
{
public:
LiverPool(LiverPool&& val) noexcept; // move construtor
LiverPool& operator=(LiverPool&& val) noexcept; // move assignment
}
http://colorscripter.com/info#e" target="_blank" style="color:#4f4f4f; text-decoration:none">Colored by Color Scripter
|
" target="_blank" style="text-decoration:none; color:white"> |
3. 왜 사용 하는가?
불필요한 복사를 하지 않아서. 메모리 할당의 횟수를 줄일 수 있다.
4. 어떤 상황에서 사용하는가?
첫번째 컨테이너에 담을 때
가령 벡터에 객체를 담을때 벡터는 동적으로 확장을 하는데, 객체에 이동 시맨틱을 정의 및 구현하면
확장시 복제 대신 이동이 일어나서 불필요한 복사를 방지한다. 이게 몇번 안하면 상관 없을수도 있으나
수천번 수만번을 한다면 분명 큰 오버헤드이다.
두번째 임시 객체를 리턴할 때, 임시 객체는 함수 리턴후에 소멸하는데, 일반 복제 대입 연산 대신 이동 대입 연산을
호출한다.
기타 등등
1
2
3
4
5
6
7
8
9
|
'언어' 카테고리의 다른 글
C++ 초기화 (0) | 2019.06.06 |
---|---|
C++ 타입 그리고 캐스팅 방법 (0) | 2019.06.06 |
C++ 아주 헷갈리는 const 키워드 (0) | 2019.06.06 |
C++ 참조 정리 (0) | 2019.06.06 |