Gra*_*ton 5 c++ memory-management stl
来自C#背景,我对C++上的内存管理只有最模糊的想法 - 我所知道的是我必须手动释放内存.正如我的C++代码被写入的类型中的物体这样的方式的结果std::vector,std::list,std::map自由地实例化,使用,但不会释放.
直到我几乎完成了我的程序,我才意识到这一点,现在我的代码由以下几种模式组成:
struct Point_2
{
double x;
double y;
};
struct Point_3
{
double x;
double y;
double z;
};
list<list<Point_2>> Computation::ComputationJob
(list<Point_3>pts3D, vector<Point_2>vectors)
{
map<Point_2, double> pt2DMap=ConstructPointMap(pts3D);
vector<Point_2> vectorList = ConstructVectors(vectors);
list<list<Point_2>> faceList2D=ConstructPoints(vectorList , pt2DMap);
return faceList2D;
}
Run Code Online (Sandbox Code Playgroud)
我的问题是,我必须释放每个单独的列表用法(在上面的例子中,这意味着我必须释放pt2DMap,vectorList并且faceList2D)?那将是非常乏味的!我也可以改写我的Computation类,以便它不易发生内存泄漏.
知道如何解决这个问题吗?
Fre*_*Foo 11
否:如果没有分配对象new,则不需要显式释放/删除它们.当它们超出范围时,它们会自动解除分配.当发生这种情况时,会调用析构函数,它应该释放它们引用的所有对象.(这称为资源获取是初始化,或RAII,以及标准类,如std::list并std::vector遵循此模式.)
如果你使用new,那么你应该使用智能指针(scoped_ptr)或显式调用delete.调用的最佳位置delete是析构函数(出于异常安全的原因),尽管应尽可能使用智能指针.