스콧 마이어스의 Effective C++을 읽고 개인 공부 목적으로 요약 작성한 글입니다!
💡 new 표현식에
[]
을 썼으면, 대응되는 delete 표현식에도[]
을 써야 한다!
💡 마찬가지로 new 표현식에[]
을 안썼으면, 대응되는 delete 표현식에도[]
을 쓰면 안된다!
new를 통해 동적할당하면 힙에 메모리가 할당된다
그러면 메모리가 어떻게 배치되냐면
객체의 배열이 동적할당되면,,
힙 메모리에는 배열 원소의 개수 (size)가 올라간다.
그래서 delete연산자가 소멸자가 몇 번 호출되어야 하는지를 알 수 있다..
그래서 delete한테 객체의 배열의 크기가 얼마인지 알려주고 싶다면,
delete를 delete[]
로 선언해주면 된다!!
그러면 delete가 포인터가 배열을 가리키고 있구나라고 알게 된다.
string* stringPtr1 = new string;
string* stringPtr2 = new string[100];
...
delete stringPtr1;
delete[] stringPtr2;
요렇게!!
typedef 로 정의된 어떤 타입의 객체의 배열을 메모리에 생성하려고 new를 쓰면,
나중에 어떤 형태의 delete를 해줘야 하는지는 내가 결정해야 한다.
typedef string AddressLines[4];
string* pal = new AddressLines;
delete pal; // Error
delete[] pal; // OK
ㅇㅋ?
근데 그냥
typedef를 굳이 쓰지 말자
걍 vector<string>
하믄 되자나
😊 느낀점
new에는 delete
new[]에는 delete[]
당연하지만,, 메모리 내부 배치구조는 솔직히 몰랐당!!
새로 또 배워가유,,