shared_ptr을 move로 옮기면
auto a = std::move(b)이렇게 옮기면 b는 없어지고 a는 b를 완전히 받던데
그냥 쌩으로 만든
B* b =new b;
auto a = std::move(b);
이렇게하면 그냥 두 변수 모두 자기 자신의 주소값을 가지고있던데 왜그런거임?
move를 통해서 rvalue로 변형시켰으니까 b에 있는 이동대입연산자가 불러와져야되는거아님?
근데 왜 그냥 복사가 되어버린것임?
당연히 B의 이동생성자하고 이동대입연산자 둘 다 default로 설정해놨음
std::move가 B* b를 nullptr로 만들지 못하니까
default 이동생성자는 복사생성자와 같음
std::move는 그냥 타입 캐스팅만 하는 애임. 이렇게하면 그냥 두 변수~~~그냥 복사가 되어버린것임? <== std::move는 그냥 캐스팅일 뿐이니 이런 동작은 없고, shared_ptr 같은건 이동생성자 직접 구현해서 저 기능을 제공하는거임
아하 내가 멍청했군 ㄳㄳ move와 forward는 단순 캐스팅인데 자꾸 내가 이상한 생각을 하는구나 ㄳ
22버전에서 이상하게 짜면 의도치않게 복사될 수 있다는 말도 알았음. ㄳ
만약 shared_ptr이 Default Move Constructor를 그대로 썼다면 생각한대로 동작하겠지만 소유권 이전이라는 의미로 move 동작을 재정의했기 때문에 그렇게 되지 않는 것임