私は現在、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