标准列表,矢量,地图等占用的可用内存

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::liststd::vector遵循此模式.)

如果你使用new,那么你应该使用智能指针(scoped_ptr)或显式调用delete.调用的最佳位置delete是析构函数(出于异常安全的原因),尽管应尽可能使用智能指针.