개발자 면접 공부/C-C++

Move Semantics

chogyujin 2023. 10. 29. 22:49
728x90

1. 개요

오늘은 C++ 11에 나오는 Move Semantics (move)에 대해서 알아보겠습니다.


2. Move?

Move 함수는 정확히 말하면 변수값을 R-Value로 바꿔주는 함수입니다.

 

#include<iostream>

using namespace std;

class A
{
public:
	A() { std::cout << "일반 생성자 호출!" << std::endl; }
	A(const A& a) { std::cout << "복사 생성자 호출!" << std::endl; }
	A(A&& a) { std::cout << "이동 생성자 호출!" << std::endl; }
};

int main()
{
	A a;

	std::cout << "---------" << std::endl;
	A b(a);

	std::cout << "---------" << std::endl;
	A c(move(a));
}

이렇게 이동생성자를 정의를 하면 move를 통해 a의 객체를 R-Value로 변경하여 이동 생성자가 호출되는 모습이 보입니다.

또한, 이러한 코드도 만들수 있습니다.

#include<iostream>

using namespace std;

int main()
{
	int a = 5;
	int&& b = move(a);
	cout << b;
}

하지만 주의사항은 move는 이동생성자를 부르는 키워드가 아닙니다.

단지, L-Value를 R-Value로 바꿔주는 역할만 할 뿐입니다.


3. Ref

https://modoocode.com/228

 

씹어먹는 C++ - <12 - 2. Move 문법 (std::move semantics) 과 완벽한 전달 (perfect forwarding)>

모두의 코드 씹어먹는 C++ - <12 - 2. Move 문법 (std::move semantics) 과 완벽한 전달 (perfect forwarding)> 작성일 : 2018-03-27 이 글은 47834 번 읽혔습니다. 등에 대해 다룹니다. 안녕하세요 여러분! 지난번의 우

modoocode.com

 

'개발자 면접 공부 > C-C++' 카테고리의 다른 글

유니폼 초기화  (0) 2024.03.06
C++ vs C#  (1) 2024.02.18
스마트 포인터의 new와 make의 차이  (1) 2023.10.03
Inline 에 대하여  (2) 2023.09.25
C++ 17 variant  (0) 2023.09.19