我目前正在让自己进入 c++ 以使用 opengl 进行较低级别的编码。我来自一个沉重的 objc 背景,所以我对内存管理有一些了解,但我似乎无法理解“boost”库如何管理容器类型,如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
?