Message_Block 은 오직 힙에서만?

29 views
Skip to first unread message

레이옷

unread,
Mar 20, 2006, 4:25:11 AM3/20/06
to kaug
안녕하세요? ACE 초보 레이옷입니다.

클래스 내부에 버퍼를 두기 위해서 ACE_Message_Block ibuf_;
와 같이 선언한 후,
소멸자에서 release()를 불러주니까 crash 가
발생하더군요.

콜스택의 대강의 모양은 다음과 같았습니다.

ACE_Message_Block::~ACE_Message_Block() --> BANG!!!
ACE_Message_Block::release_i() --> delete this; 호출
ACE_Message_Block::release()

release()를 하면 무조건 저게 불리는 걸로 봐서, 무조건
메시지 블럭은 힙에다가 만들어야 한다는 개념이
있지 않나 싶은데, 책이나 웹, ace 뉴스그룹에서는
특별히 명시하고 있지는 않네요.

redpixel

unread,
Mar 20, 2006, 7:07:55 PM3/20/06
to kaug...@googlegroups.com
아마도 ACE에서는 기본적으로 대부분의 객체해제를 release() 메소드에 거는 것 같습니다. reactor에서 connection 객체를 소멸시킬때도 release()를 사용하는데, 이때 delete this 옵션이 있는 것으로 보아 대부분의 경우 스스로(?) 지우는 코드가 있는거 같아요. 그러니 가급적 release() 메소드로 지우는게 좋겠죠. (즉, new로 생성하는게 유리하다는 이야기입니다) ACE_Message_Block ibuf; 보다는 ACE_Message_Block *pibuf; 이런식으로 쓰는것을 거의 강제하고 있다고 봐야죠. ^_^

2006/3/20, 레이옷 <Rei...@gmail.com>:
안녕하세요? ACE 초보 레이옷입니다.

클래스 내부에 버퍼를 두기 위해서 ACE_Message_Block ibuf_;
와 같이 선언한 후,
소멸자에서 release()를 불러주니까 crash 가
발생하더군요.

콜스택의 대강의 모양은 다음과 같았습니다.

ACE_Message_Block::~ACE_Message_Block() --> BANG!!!
ACE_Message_Block::release_i()  --> delete this; 호출
ACE_Message_Block::release()

release()를 하면 무조건 저게 불리는 걸로 봐서, 무조건 http://www.redwiki.net
PGPkey: http://www.redwiki.net/pubkey
Reply all
Reply to author
Forward
0 new messages