C++에서 객체 배열을 처리하는 것에 대해 약간 혼란 스럽습니다. 객체가 전달되는 방식 (참조 또는 값)과 해당 객체를 전달하는 방법에 대한 정보를 찾을 수없는 것처럼 보입니다. 배열에 저장됩니다.C++에서 동적 객체 배열 정리
개체 배열을 해당 개체 형식에 대한 포인터 배열로 기대할 수 있지만이 위치는 어디에도 쓰이지 않습니다. 그것들은 포인터가 될 것인가, 객체 자체가 배열의 메모리에 배치 될 것인가?
아래 예제에서 사용자 정의 클래스 인 myClass는 문자열을 유지합니다 (이 변수는 가변 크기로 만들거나 문자열 객체가 문자열에 대한 포인터를 보유하므로 일정한 공간을 차지합니다.) myContainer 내에서 myClass 객체의 동적 배열 myContainer.addObject() 메서드에서 더 큰 배열을 만들고 모든 객체를 새 객체와 함께 복사 한 다음 이전 객체를 삭제하려고합니다. 내 소멸자 제대로 내 기억을 정리하고있어 확신 - 나는이 지역에서 할 수있는 것을 개선
class myClass
{
private:
string myName;
unsigned short myAmount;
public:
myClass(string name, unsigned short amount)
{
myName = name;
myAmount = amount;
}
//Do I need a destructor here? I don't think so because I don't do any
// dynamic memory allocation within this class
};
class myContainer
{
int numObjects;
myClass * myObjects;
public:
myContainer()
{
numObjects = 0;
}
~myContainer()
{
//Is this sufficient?
//Or do I need to iterate through myObjects and delete each
// individually?
delete [] myObjects;
}
void addObject(string name, unsigned short amount)
{
myClass newObject = new myClass(name, amount);
myClass * tempObjects;
tempObjects = new myClass[numObjects+1];
for (int i=0; i<numObjects; i++)
tempObjects[i] = myObjects[i]);
tempObjects[numObjects] = newObject;
numObjects++;
delete newObject;
//Will this delete all my objects? I think it won't.
//I'm just trying to delete the old array, and have the new array hold
// all the objects plus the new object.
delete [] myObjects;
myObjects = tempObjects;
}
};
고마워, 그게 정확히 내가 뭘했는지, 그리고 난 myObjects NULL로 initialising 고려하지 않았다 (내 실제 코드 numObjects 0이면 myObjects 액세스하지 못하도록 논리가 있지만 자격을 향상시키고 주석을 추가하는 것을 잊었습니다 to say 나는 그렇게 했어) 난 구조체를 C#에서만 사용했다. C#과 C++의 구조체간에 중요한 차이점이 있습니까? –
예. C++의 struct는 클래스와 비슷하지만, 다르게 말할 때까지는 모든 것이 'public'입니다. (클래스에서 디폴트는'private'입니다.) 아주 작고 간단한 데이터 타입을 정의 할 때 C++에서'struct'라는 단어를 사용하는 경향이 있습니다. C#에서는이 두 가지가 더 큰 차이가 있습니다. 'struct '는 상속 될 수 없으며 값으로 전달됩니다 (일반 클래스와 달리). 아마도 내가 잊어 버린 몇 가지 차이점이 더있을 것입니다. 기본적으로 C#에서는 성능상의 이유로 단순하고 작은 객체를 사용합니다 (좋은 예는 그래픽 목적의 짧은 벡터입니다). – Shiroko
구문이 틀리면'pair array [10];과'pair * array_of_pointers [10];'이어야합니다. – fredoverflow