: 아래의 그림에서는 오른쪽 4개의 메모리를 할당하고, 생성자가 호출된 상태임.
-> 생성자에서 멤버에 대한 동적할당이 발생한다면, 메모리 소비하는 것임.
: 어차피 왼쪽의 2개를 오른쪽 2개에다가 이전하는 것이므로, 메모리만 할당하자는 것임.
- 아래의 코드에서 p2의 멤버 자원을 동적할당하지 않고, p1으로 부터
이동 받는 코드를 만들어라.
1) operator new 와 placement new를 했으면, 반드시
해제하는 코드도 명시적으로 작성하자.
-> destructor 계속 호출됨...
2) 동적할당 과 해제 짝을 맞춰야 함.
: new 할당으로 한후, 해제를 분리시켜서 했떠니 오류 발생함.
3) new ~ delete 짝을 맞추면 이상 없음.
이전시간까지 큰 배열에 작은 배열 포인터를 이전하는 작업을 함.
but, 생각을 해보면, 큰 포인터의 2개 배열 원소를 굳이 할당할 필요가 없음.
-> 어차피 작은 배열에 속한 2개를 이전할 것이기 때문임.
resource를 의미하는 것임.
: 아래의 그림에서는 오른쪽 4개의 메모리를 할당하고, 생성자가 호출된 상태임.
: 어차피 왼쪽의 2개를 오른쪽 2개에다가 이전하는 것이므로, 메모리만 할당하자는 것임.
: 이전 강의에서는 move 대입을 했지만, 이번에는 move 생성자를 호출하자.
위의 예제의 경우는 디폴트 생성자가 있다는 가정하에 가능한 코드임.
클래스에 디폴트 생성자가 없을 수 있기 때문에 , 최초 포인터도 메모리할당 + 생성자 호출을 따로 따로 하자.
이어서 자원해제 코드를 작성하자.
-1) 소멸자를 불러서 멤버들 해제
-2) 객체 해제
vector<Test> v(2);
v.resize(4);
cout << "--" << endl;
-> move가 이루어지는 것을 확인할 수 있음.
move 대입이 아닌 move 생성자를 사용하고 있는 것을 확인할 수 있음.