임의의 memory chunk 를 클래스로 캐스팅 한 후, 사용해도 괜찮?

buffmail의 이미지

Data 라는 클래스가 있다면,

Data *pData = (Data*) new char [ sizeof(Data)] ;
pData->init () ;
pData->otherFunc() ;

이런 식으로 임의의 memory chunk 를 할당해 놓고 캐스팅 해서 사용해도

괜찮을까요?

g++ 에서 간단히 테스트 해 봤는데, Constructor 가 호출 안 되는 것 빼고,

멤버함수들은 우선 잘 동작하네요.. (delete 하면 Destructor 도 호출되네요..)

그런데 저게 정의되지 않은 행동인데 우연히 돌아가는건지, 아니면 원래 돌아가야 맞는 건지

(생성자호출 안되는 것은 빼고..) 확신이 서지 않네요.. ㅡ.ㅡ

저게 안전하다면 굳이 사용하려는 이유는.. pooler 에서 객체들을 우선 생성할

때 저런 식으로 한 번에 메모리를 끌어다가 만들까 싶어서 입니다.

(물론, 풀링하는 객체들의 생성자가 호출 안될테니..저만 써야겠지만..^^;)

저런 식으로 한번에 메모리를 할당해놓는 MemPooler 라는 풀러를 봤는데,

그 MemPooler 를 사용한 소스에서는 멤버함수와 생성자/소멸자가 없는

단순한 struct 만을 풀링하기 때문에, 멤버함수가 있는 일반 클래스까지 같은

식으로 쓸 수 있을지.. 궁금합니다. ^^;

cinsk의 이미지

cinsk의 이미지

안됩니다. 저렇게 쓰면.

alignment error날 확률이 높습니다.

그리고 다른 C++ 전문가 분들이 대답해 주시겠지만, 차라리 new()를 따로 만드심이 좋을 것 같군요. 실제 allocation은 obstack을 쓰시고.