임의의 memory chunk 를 클래스로 캐스팅 한 후, 사용해도 괜찮?
글쓴이: buffmail / 작성시간: 수, 2003/10/29 - 8:12오후
Data 라는 클래스가 있다면,
Data *pData = (Data*) new char [ sizeof(Data)] ; pData->init () ; pData->otherFunc() ;
이런 식으로 임의의 memory chunk 를 할당해 놓고 캐스팅 해서 사용해도
괜찮을까요?
g++ 에서 간단히 테스트 해 봤는데, Constructor 가 호출 안 되는 것 빼고,
멤버함수들은 우선 잘 동작하네요.. (delete 하면 Destructor 도 호출되네요..)
그런데 저게 정의되지 않은 행동인데 우연히 돌아가는건지, 아니면 원래 돌아가야 맞는 건지
(생성자호출 안되는 것은 빼고..) 확신이 서지 않네요.. ㅡ.ㅡ
저게 안전하다면 굳이 사용하려는 이유는.. pooler 에서 객체들을 우선 생성할
때 저런 식으로 한 번에 메모리를 끌어다가 만들까 싶어서 입니다.
(물론, 풀링하는 객체들의 생성자가 호출 안될테니..저만 써야겠지만..^^;)
저런 식으로 한번에 메모리를 할당해놓는 MemPooler 라는 풀러를 봤는데,
그 MemPooler 를 사용한 소스에서는 멤버함수와 생성자/소멸자가 없는
단순한 struct 만을 풀링하기 때문에, 멤버함수가 있는 일반 클래스까지 같은
식으로 쓸 수 있을지.. 궁금합니다. ^^;
Forums:
obstack.
obstack.
C FAQ: http://www.eskimo.com/~scs/C-faq/top.html
Korean Ver: http://cinsk.github.io/cfaqs/
안됩니다. 저렇게 쓰면.alignment error날 확률이 높습
안됩니다. 저렇게 쓰면.
alignment error날 확률이 높습니다.
그리고 다른 C++ 전문가 분들이 대답해 주시겠지만, 차라리 new()를 따로 만드심이 좋을 것 같군요. 실제 allocation은 obstack을 쓰시고.
C FAQ: http://www.eskimo.com/~scs/C-faq/top.html
Korean Ver: http://cinsk.github.io/cfaqs/
댓글 달기