私は現在、opengl を使用した低レベルのコーディングのために C++ に取り掛かっています。私は objc の経験が豊富なため、メモリ管理についてはある程度理解していますが、「ブースト」ライブラリがptr_vector.
私の問題は、ptr_vectorがそれ自体とそのオブジェクトの破壊をどのように管理するかがわからないという事実に関連していると思います。
次のコードを見てください。
// Header file
...
ptr_vector<IObject3D> objects;
...
// Implementation file
...
void ApplicationEngine::init()
{
WavefrontObject3D *object = new WavefrontObject3D("Ninja.obj");
objects.push_back(object);
}
...
それで、実際の質問について:「オブジェクト」変数を介してここでリークを作成していますか?
私は objc で明示的な呼び出しを使用してオブジェクトを手動で保持および解放することに慣れています。以前alloc initは WavefrontObject3Dobjectを使用し、それを配列に追加し、その後release同じオブジェクトをリークを回避する必要がありました。
しかしdelete object、呼び出しの後に追加するpush_backと、WavefrontObject3D のデコンストラクターobjectが呼び出されます。これにより、変数ptr_vectorが保持されていないことがわかります。object私の仮定は正しいですか?
追加の、しかし関連する質問:含まれているクラスを破棄したいとしましょう。それが管理する、または要素でApplicationEngine何らかのデコンストラクターを呼び出す必要はありませんか?ptr_vector