C++Builder Programming Forum
C++Builder  |  Delphi  |  FireMonkey  |  C/C++  |  Free Pascal  |  Firebird
볼랜드포럼 BorlandForum
 경고! 게시물 작성자의 사전 허락없는 메일주소 추출행위 절대 금지
C++빌더 포럼
Q & A
FAQ
팁&트릭
강좌/문서
자료실
컴포넌트/라이브러리
메신저 프로젝트
볼랜드포럼 홈
헤드라인 뉴스
IT 뉴스
공지사항
자유게시판
해피 브레이크
공동 프로젝트
구인/구직
회원 장터
건의사항
운영진 게시판
회원 메뉴
북마크
볼랜드포럼 광고 모집

C++빌더 Q&A
C++Builder Programming Q&A
[57920] RTTI관련 질문입니다.
xennie [form114] 733 읽음    2009-08-03 10:05
// 우선 C++Builder 게시판에 올리게 돼 매우 조심스럽습니다.
// 물어볼 만한 곳이 이곳 밖에 없어서 올립니다.
// 행여 문제가 된다면 댓글주시면 삭제하겠습니다.

// 아래의 소스튼 VS 2008 SP1에서 작성했습니다.
// composite 패턴을 사용해 본건데요.
// 문제가 되는 부분은 아래의 주석 부분입니다.

class super
{
public:
	int GetName()
	{
		return 0;
	}
	int SetName(int n)
	{
		n_age = n;
		return 0;
	}

protected:
	int				n_age;
};

typedef std::vector super_vector;
typedef super_vector::iterator super_iter;

class leaf : public super
{
};

class composite : public super
{
public:
	super_vector* get_vector()
	{
		return &m_sv;
	}

private:
	super_vector		m_sv;
};

void setup_sub(composite* pC)
{
	leaf				lf1;
	leaf				lf2;

	lf1.SetName(11);
	lf2.SetName(12);

	pC->get_vector()->push_back(lf1);
	pC->get_vector()->push_back(lf2);
}

void CrttiDlg::OnBnClickedOk()
{
	// TODO: Add your control notification handler code here
	super_vector		sv;
	leaf				lf1;
	leaf				lf2;
	composite			c;

	lf1.SetName(1);
	lf2.SetName(2);
	c.SetName(100);

	sv.push_back(lf1);
	sv.push_back(lf2);
	sv.push_back(c);

	setup_sub(&c);

	for(int i=0; i < sv.size(); i++)
	{
		if(i==2)
		{
			//=============================================================================
			// 바로 이부분인데요.
			// 여기에서 형변환해서 보면 super의 형태는 정상으로 보이는데.
			// reinterpret_cast, dynamic_cast, static_cast 포함해서
			// composite로 명시적인 변환을 시도하면 composite의 멤버 super_vec이
			// 비정상적인 데이터입니다.
			// 예상했던는 2개의 데이터가 들어있어야 하는데, 쓰레기 데이터가...
			// 어제 하루종일 이문제로... ㅠㅠ
			composite* p_c = (composite*)(&sv[i]);
			super_vector* p_sv = p_c->get_vector();
			CString s_msg;
			s_msg.Format("sizeof composite:[%d]", p_sv->size());
			AfxMessageBox(s_msg);
			//==============================================================================
		}
	}
}

+ -

관련 글 리스트
57920 RTTI관련 질문입니다. xennie 733 2009/08/03
57924     자답] 복사생성자가 동작하면 하위타입 데이터가 손실. xennie 829 2009/08/03
Google
Copyright © 1999-2015, borlandforum.com. All right reserved.