std::move()

김대익·2022년 2월 25일
post-thumbnail
#include <iostream>
#include <string>
using namespace std;

int main() {
	string a = "abc";
    cout << a << '\n';
    
    string b = std::move(a);
    cout << "b: " << b << '\n';
    cout << "a: " << a << '\n';
    
}

를 출력해보면

a: abc
b: abc
a:

으로 나오는데
이는 move는 L value -> R value로 변경해 resource ownership을 다른 object에게 넘겨줄 수 있다.
a가 가지고 있던 heap공간의 "abc"라는 ownership을 move를 통해 b에게 넘겨준 것이다.

함수를 call했을 때 reference로 넘겨준다는 것은 string object의 a를 함수 안에서 마음대로 바꿀 수 있다는 말

라고하면 main에서 storeByLRef함수가 실행되는 순간 "abc"가 쓰여져있던 a가
storeByLRef함수 내의 s = "nocodeprogram"에 의해 재정의되어
main의 a의 출력이 abc에서 nocodeprogram으로 바뀌게 된다.

storeByLRef함수의 b = std::move(s)를 사용하게 되면
단 한번도 copy하지 않고 local string b에 저장될 수 있다.

#include <string>
#include <iostream>

class Cat
{
public:
	void setName(std::string & name)
	{
		mName = std::move(name);
	};
private:
	std::string mName;
};

int main()
{
	Cat kitty;
	std::string s = "kitty";
	kitty.setName(s); // 1 copy L value를 넘겨주는 방식
	kitty.setName("nabi");//0 copy R value를 넘겨주는 방식
}

0개의 댓글