: funda c++ p.281~ λΆν° λ΄μ©μλ€.
: move μμ±μ λ° μ΄λ λμ μ°μ°μλ₯Ό λ§λ€λ, κ°μ²΄μ λͺ¨λ λ©€λ²λ€λ λͺ¨λ move μ²λ¦¬νμ.
: μλμ κ·Έλ¦Όμμ move μ²λ¦¬ν΄μ Test λ©€λ²λ move μ²λ¦¬λλμ§λ₯Ό νμΈνμ.
μ΄μ κ°μ ν΄λμ€λ₯Ό λ§λ¦. : λ³΅μ¬ μμ± λ§λ€κ³ , νΈμΆκΉμ§ μ§νν¨.
μ΄λμμ±μλ₯Ό λ§λ€κ³ , moveλ₯Ό νΈμΆνμ.
: ν¬μΈν°μΈ bufμΈ κ²½μ°, move ν΄μΌν μΌμ μνν¨. : λ©λͺ¨λ¦¬ μ΄μ λ° nullμ²λ¦¬
-> μΆλ ₯ν΄λ³΄λκΉ.... copyκ° λ°μν¨μ νμΈν μ μλ€.
-> testλ copyκ° μΆλ ₯λλ κ²μ νμΈν μ μμ.
λΉμ°ν κ²μ΄λ€. λμ Object μ΄λμμ±μμμ μ΄κΈ°ν리μ€νΈμμλ move μ²λ¦¬λ₯Ό
νμ§ μμκΈ° λλ¬Έμ΄λ€.
: λͺ¨λ λ©€λ²λ€μ λν΄μ move μ²λ¦¬ν΄μ μ΄λμμ±μκ° νΈμΆλλλ‘ νμ.
-> μλ μ½λλ₯Ό 보면, λͺ¨λ λ©€λ²μ λν΄ move ν΄μ 보λ΄κ³ μλ κ²μ νμΈν μ μμ.
μ΄λμμ±μμ λͺ¨λ λ©€λ²λ₯Ό move μ²λ¦¬νμ.
μ΄λμμ±μλ₯Ό λ§λ€ λ, moveνλ λͺ©μ μΈ ν¬μΈν°μ λ©λͺ¨λ¦¬ μ΄μ
μ¦ μμ λ³΅μ¬ + μ΄μ νλ €λ ν¬μΈν°λ₯Ό null λ‘ λ§λ€μ΄μΌ ν¨.
: λ³΅μ¬ μμ±μμ μ΄λμμ±μλ₯Ό μ μ κ° μ§μ μ μν΄ μ£Όμ§ μμΌλ©΄, μ»΄νμΌλ¬κ°
μμμ λν΄νΈ 볡μ¬μμ±μμ λν΄νΈ μ΄λμμ±μλ₯Ό νΈμΆν¨.
κ΄λ ¨ μ½λ
: νμ§λ§ μ΄λ κ² νλ©΄, ν¬μΈν°κ° μμλ³΅μ¬ λλ―λ‘, λ¬Έμ κ° μκΉ.
ν¬μΈν°λ₯Ό μ£Όμμ²λ¦¬νκ³ λ€μ νμΈν΄λ³΄μ.
-> μμ
λ΄μ©μμλ μ»΄νμΌλ¬κ° μμμ 볡μ¬μ μ΄λμμ±μλ₯Ό λ§λ€κ³ ,
μ΄λμμ±μ λ΄λΆμμλ λͺ¨λ λ©€λ²μ λν΄ move μ²λ¦¬νκ³ μμ.
: but λ΄ μ»΄νμΌλ¬λ 볡μ¬μμ±μλ₯Ό νΈμΆνκ³ μμ.
κ²°κ³Ό
1) κ·Έλ₯ μ΄λμμ±μλ₯Ό λ§λ€κ³ , λͺ¨λ λ©€λ²λ₯Ό move μ²λ¦¬νμ...
2) μλλ©΄, λ©€λ²λ₯Ό μ€λ§νΈ ν¬μΈν°λ‘ μ¬μ©νμ.
#include <stdio.h>
#include <Windows.h>
#include <tchar.h>
#include <vector>
#include <iostream>
#include <string>
using namespace std;
#include <type_traits>
class Test
{
public:
Test() {}
~Test() { }
Test(const Test& obj){
cout << "copy constr" << endl;}
Test(Test&& obj) {
cout << "move constr" << endl; }
Test& operator=(const Test& obj)
{
cout << "copy=" << endl;
return *this;
}
Test& operator= (Test&& obj)noexcept
{
cout << "move=" << endl;
return *this;
}
};
class Object
{
size_t sz;
//int* buf;
string tag;
Test test;
public :
Object(size_t s, string t)
: sz(s), tag(t) /*buf(new int[s])*/ {}
~Object() { /*delete buf;*/ }
//Object(const Object& obj) : tag(obj.tag), test(obj.test), sz(obj.sz)
//{
// buf = new int[sz];
// memcpy(buf, obj.buf, sizeof(int) * sz);
//}
//
//Object(Object&& obj) noexcept
// : tag(move(obj.tag)) , test(move(obj.test)) , sz(move(obj.sz))
//{
// buf = obj.buf;
// obj.buf = NULL;
//}
};
int main()
{
Object a(4, "bomi");
Object b(move(a));
Object c = a;
}