2016년 3월 20일 일요일

[Effective C++] 항목16 : new 및 delete를 사용할 때는 형태를 반드시 맞추자.

- new / delete 연산자를 사용해서 표현식을 쓰게 되면 아래 표의 순서로 동작합니다.
 new
 ① 메모리 할당
 ② 할당된 메모리에 대해 한 개 이상의 생성자 호출
 delete
 ① 기존에 할당된 메모리에 대해 한개 이상의 소멸자 호출
 ② 메모리 해제

delete 연산자가 적용되는 객체는 대체 몇 개나 될까요? ==> 소멸자가 호출되는 횟수

- 단일 객체의 메모리 배치구조는 객체 배열에 대한 메모리 배치구조와 다릅니다.
  배열을 위해 만들어지는 힙 메모리에는 대개 배열원소의 개수가 박혀 있어, 소멸자가 몇번 호출될지를 쉽게 알 수 있습니다.
  반면, 단일 객체용 힙 메모리는 이런 정보가 없습니다.
?
1
2
3
4
5
std::string *stringPtr1 = new std::string;
std::string *stringPtr2 = new std::string[100];
 
delete stringPtr1;
delete [] stringPtr2;
delete 연산자로 하여금 '배열 크기 정보가 있다'는 것을 알려주기 위해서는 대괄호 쌍( [] )을 delete 뒤에 붙여줍니다.

* new 표현식에 []를 썼으면, 대응되는 delete 표현식에도 []를 써야 합니다.
  마찬가지로 new 표현식에 []를 안썼으면, 대응되는 delete 표현식에도 []를 쓰지 말아야 합니다.

댓글 없음:

댓글 쓰기

[Effective C++] 항목 30 : 인라인 함수는 미주알고주알 따져서 이해해 두자.

인라인 함수를 사용하면 컴파일러가 함수 본문에 대해 문맥별 최적화를 걸기가 용이해집니다. 인라인 함수의 아이디어는  함수 호출문을 그 함수의 본문으로 바꿔치기하자는 것  남발했다가는 코드의 크기가 커질 게 뻔하다. 인라인 함수로 부풀려진 ...