|
클래스 객체를 vector에 넣어서 데이터를 관리할려고 합니다.
밑에 소스에서 보는것과 같이..
지역 클래스 객체 2개를 만든다음에 벡터에 넣고... 메모리를 할당하고 데이터 값을 초기화 합니다.
그런데 이상한게.. 각 객체에 대해서 따로따로 동적으로 메모리를 할당했는데..
동적으로 생성된 메모리 주소를 비교해보면 두개의 객체가 한개의 동일한 메모리를 가리킵니다.
벡터에 어떤 값을 집어 넣을경우에 값에 의한 복사가 이루어지는것으로 알고 있는데요... 서로 다른 객체 2개를 넣으면 서로 다른 복사본 객체 2개가 벡터에 넣어져야 하고 벡터에 들어가 있는 클래스의 멤버포인터 변수에 동적으로 메모리 할당하면 2개의 할당된 메모리가 있어야 하는거 아닌가요?
왜 그런지 모르겠습니다. 먼가 제가 놓치고 있는 부분이 있는거 같은데요...
어떤게 틀렸는지 알려주세요...
-------------------------------------------------------------------------------------
클래스는 다음과 같구요..
class TDataHandling_ECT
{
private :
short *pHori;
int m_nSize;
public :
TDataHandling_ECT()
{
pHori = NULL;
m_nSize = 0;
}
~TDataHandling_ECT()
{
delete [] pHori;
}
void CreateData(int nSize)
{
m_nSize = nSize;
pHori = new short[nSize];
}
short* GetHori()
{
return pHori;
}
};
void __fastcall TForm1::Button1Click(TObject *Sender)
{
vEct_Data.clear();
TDataHandling_ECT var;
vEct_Data.push_back(var);
vEct_Data[0].CreateData(50);
//(vEct_Data.back()).CreateData(50);
for(int i = 0; i < 50; i++)
(vEct_Data.back()).GetHori()[i] = i;
TDataHandling_ECT var1;
vEct_Data.push_back(var1);
vEct_Data[1].CreateData(50);
//(vEct_Data.back()).CreateData(50);
if(vEct_Data[0].GetHori() == vEct_Data[1].GetHori())
ShowMessage("Same");
}
|