OK、この質問はばかげているように聞こえるかもしれませんが、メモリ管理 (特に C/C++) は私の長所ではありませんでした。通常は目立たないので、見落としがちです。ですから、これがばかげているように聞こえる場合は、ご容赦ください。ただし、私の現在のプロジェクトには大量のデータと処理が含まれているため、メモリ消費量は数秒で簡単に 2GB を超えてしまい、全体が確実に遅くなるため、修正方法を考え始める時が来ました。
さて、私の状況ですが…
私のプリンシパルクラス(そのうち数百万のインスタンスを作成しています(使用されなくなるため、自動的に削除されることを願っています)。おそらくこれが原因です)は(大まかに)次のとおりです。
class MyClass
{
public:
// My Constructors
MyClass ();
MyClass (std::string param);
// My Destructor (still empty)
virtual ~MyClass ();
// Some methods
void methodA(std::string moves);
void methodB();
//----------------------
// My Variables
//----------------------
boost::array<int,64> arrA;
boost::array<unsigned int,13> arrB;
unsigned int key;
boost::array<int,3> arrC;
int argA;
int argB;
};
そして、これは(大まかに-実際のコードは変更されています)上記のクラスのインスタンスがどのように作成されるかです:
vector<MyClass*> SomeOtherClass::getListOfObjects()
{
vector<MyClass*> objects;
for (int i=0; i<MAX_OBJS; i++)
{
// Do some preparatory work
objects += new MyClass();
}
return objects;
}
上記の関数の結果がどのように使用されているかを次に示します。
void SomeOtherClass::doSth()
{
vector<MyClass*> objs = this->getListOfObjects();
int objsSize = objs.size();
for (int i=0; i<objsSize; i++)
{
MyClass* obj = objs[i];
// Do sth with obj
delete objs[i];
}
}
だから、私の質問は:
オブジェクトが不要になったために解放されたときに、その「サブコンポーネント」もすべて解放されるように、デストラクタで何をすべきですか? (例: 2
boost::array
秒)上記のアプローチで何か問題がありますか?
私の実装について他に知っておくべきことがあれば教えてください...