【发布时间】:2012-07-24 20:18:50
【问题描述】:
我目前正在学习 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);
}
...
那么,对于真正的问题:我是否通过“object”变量在此处创建了泄漏?
我习惯于在 objc 中通过显式调用手动保留和释放我的对象:
以前我必须 alloc init WavefrontObject3D object,将其添加到数组中,然后 release 同一个对象以避免泄漏。
但是当我在push_back 调用之后添加delete object 时,WavefrontObject3D 的解构函数object 被调用。这给了我一个提示,ptr_vector 没有保留object 变量。我的假设正确吗?
其他但相关的问题:假设我想销毁包含类 ApplicationEngine 我不必在 ptr_vector 或它管理的元素上调用某种解构器?
【问题讨论】:
-
But when I add a delete object after the push_back call the deconstructor of the WavefrontObject3D object is called.这就是delete的用途。它在指针指向的实例上调用析构函数。 -
我认为你应该阅读RAII,这是大多数内存管理在所谓的“现代”c++ 中完成的方式。
-
伟大的资源@LucTouraille!正是我想要接近 C++ 的方式。
标签: c++ memory-management boost