オブジェクトがどのように渡されるか(参照または値)およびオブジェクトが配列にどのように格納されるかについての情報が見つからないため、C++でオブジェクトの配列を処理することについて少し混乱しています。
オブジェクトの配列はそのオブジェクトタイプへのポインタの配列であると思いますが、これがどこにも書かれているのは見つかりませんでした。それらはポインタでしょうか、それともオブジェクト自体がメモリ内の配列に配置されているのでしょうか。
以下の例では、カスタムクラスmyClassが文字列を保持します(これにより可変サイズになりますか、または文字列オブジェクトが文字列へのポインタを保持するため、一定量のスペースを占有します。 myContainer内のmyClassオブジェクト。myContainer.addObject()メソッドで、より大きな配列を作成し、すべてのオブジェクトを新しいオブジェクトと一緒にその配列にコピーしてから、古いオブジェクトを削除しようとしています。 mデストラクタを使用してメモリを適切にクリーンアップします-この領域でどのような改善を行うことができますか?
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;
}
};