여기서 말하는 형태는 무엇인가?
new 와 delete, new [] 과 delete [] 를 말한ㄷ.
왜 형태를 맞추어야 하는가?
new 연산은 단일 객체 메모리 잡는 연산자이고 delete 역시 단일 객체 메모리 푸는 연산자이다.
new[] 연산은 객체 배열을 메모리에 잡는 연산자이고 delete[] 역시 객체 배열을 메모리에 푸는 연산자이다.
만약 맞추지 않으면 어떻게 되는가?
new [] 로 객체들 5개를 잡았고 delete 를 이용하면 1개의 객체만 풀어주고 나머지 4개는 프로그램 종료되기 까지 잡고 있는 어처구니 없는 사태가 발생한다.
굳이 주의해야 하는 것은?
typedef 로 typedef std::string addressLines[4] 로 잡은 뒤 std::string *p = new addressLines 한후 delete p 하게 되는 실수가 많은데, 동적으로 잡을땐 이 부분을 확실히 숙지해 두던가, 아예 사용하지 않는 편이 좋겠다.
이것만은 잊지 말자!
1. new, new[] 표현식에 대응하는 delete, delete[] 표현식을 사용 하라!
관련링크
http://ikpil.tistory.com/286
http://sanaigon.tistory.com/7
new 와 delete, new [] 과 delete [] 를 말한ㄷ.
왜 형태를 맞추어야 하는가?
new 연산은 단일 객체 메모리 잡는 연산자이고 delete 역시 단일 객체 메모리 푸는 연산자이다.
new[] 연산은 객체 배열을 메모리에 잡는 연산자이고 delete[] 역시 객체 배열을 메모리에 푸는 연산자이다.
만약 맞추지 않으면 어떻게 되는가?
new [] 로 객체들 5개를 잡았고 delete 를 이용하면 1개의 객체만 풀어주고 나머지 4개는 프로그램 종료되기 까지 잡고 있는 어처구니 없는 사태가 발생한다.
굳이 주의해야 하는 것은?
typedef 로 typedef std::string addressLines[4] 로 잡은 뒤 std::string *p = new addressLines 한후 delete p 하게 되는 실수가 많은데, 동적으로 잡을땐 이 부분을 확실히 숙지해 두던가, 아예 사용하지 않는 편이 좋겠다.
이것만은 잊지 말자!
1. new, new[] 표현식에 대응하는 delete, delete[] 표현식을 사용 하라!
관련링크
http://ikpil.tistory.com/286
http://sanaigon.tistory.com/7
'책 정리 > Effective C++ 3판' 카테고리의 다른 글
항목 21: 함수에서 객체를 반환해야 할 경우에 참조자를 반환하려고 들지 말자. (0) | 2008.06.07 |
---|---|
항목 20: '값에 의한 전달'보다는 '상수객체 참조자에 의한 전달'방식을 택하는 편이 대개 낫다. (0) | 2008.06.06 |
항목 19: 클래스 설계는 타입 설계와 똑같이 취급하자. (0) | 2008.06.05 |
항목 18: 인터페이스 설계는 제대로 쓰기엔 쉽게, 엉터리로 쓰기엔 어렵게 하자. (0) | 2008.06.04 |
항목 17: new로 생성한 객체를 스마트 포인터에 저장하는 코드는 별도의 한 문장으로 만들자 (0) | 2008.06.03 |
항목 15: 자원 관리 클래스에서 관리되는 자원은 외부에서 접근할 수 있도록 하자. (0) | 2008.06.02 |
항목 14: 자원 관리 클래스의 복사 동작에 대해 진지하게 고찰하자 (0) | 2008.06.01 |
항목 13: 자원 관리에는 객체가 그만! (0) | 2008.06.01 |
항목 12: 객체의 모든 부분을 빠짐없이 복사하자 (0) | 2008.06.01 |
항목 11: operator=에서는 자기대입에 대한 처리가 빠지지 않도록 하자 (0) | 2008.06.01 |
최근댓글