[C++] 동적 메모리 할당시 실제로 잡히는 공간은 개체 크기보다 같거나 더 큰가?
글쓴이: ikpil / 작성시간: 금, 2008/10/17 - 7:28오전
Exceptional C++ : C++ 프로그래머를 자극하는 47개의 재미있는 퍼즐 문제 중..
Pimpl 을 이용하여, 컴파일 타임 소스 의존성을 줄여, 속도를 높이는 방법이 소개 됩니다.
하지만 Pimpl의 단점으로 new / delete를 해줘야 하는 과부하가 있습니다.(과부하가 어느정도 라는것은 우선 무시합니다) 이 과부하를 줄이기 위한 방법으로 char 배열을 사용하여, char object[sizeof(객체]); 로 사용하고 new (&object[0]) 객체(); 로 사용 하는 구문이 나옵니다.
하지만 이 방법은 동적으로 할당되지 않은 버퍼(고정길이 배열)에 객체의 생성자 호출은 장담 할 수 없다고 합니다.
질문입니다.
char objet[sizeof(객체)]에 생성자 호출을 왜 장담 할 수 없을까요?
Forums:
컴파일러가 객체의
컴파일러가 객체의 생성자를 호출하는 코드를 만들기 위해서는 해당 객체의 타입을 알아야합니다.
그렇지만 char배열을 잡아 그걸 특정객체라고 지칭하는 것은 프로그래머만 아는 룰일 뿐 컴파일러는 실제 char에 담긴게 뭔지는 알 길이 없죠.
컴파일러가 아는건 단지 char타입의 배열일 뿐입니다.
-------------------------------------------------------------------------------
It's better to appear stupid and ask question than to be silent and remain stupid.
-------------------------------------------------------------------------------
It's better to appear stupid and ask question than to be silent and remain stupid.
char타입의 배열을
char타입의 배열을 형변환시켜서 사용 한다면, 컴파일러에게 그 타입임을 알려 줄 수 있지 않을까요?
http://www.ikpil.com
검색해 보니 다음과 같은 글이 있군요.
http://kldp.org/node/76375
링크 중에는 Exceptional C++의 해당 문제에 대한 링크가 걸려 있습니다.
p.s. placement new가 bus error를 일으킬 수 있음은 몰랐군요. 좋은 정보 감사합니다.
감사합니다.
감사합니다. 위험성을 피 할 길은 안쓰는 방법 밖에 없군요. ㅎㅎ
http://www.ikpil.com
댓글 달기