Занято свободной памяти by Std List, Vector, Map и т. д.

Исходя из опыта работы с 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;
}

Мой вопрос: должен ли я освободить every.single.one использования списка (в приведенном выше примере это означает, что мне нужно освободить pt2DMap , vectorList и faceList2D )? Это было бы очень утомительно! Единственная часть, в которой методы различаются, - это запрос, который они запускают в середине моего метода -

def summary = c.list {
    eq('browser', Browser.get(1)) // OR eq('os', OS.get(1))
    between('date', dates.start, dates.end)
}

Мне пришло в голову, что идеальным способом рефакторинга было бы передать первую строку замыкания в качестве параметра метода. Как и

doStats (Closure query) {
    ...
    def summary = c.list {
        query
        between('date', dates.start, dates.end)
    }
}

, я пробовал это, но "запрос" игнорируется. Вместо этого я попробовал query (), но затем предложение запроса выполняется там, где оно определено, поэтому это тоже не работает. Полагаю, я мог бы просто передать все замыкание в качестве параметра, но это кажется неправильным - запрос может также усложниться в будущем.

У кого-нибудь есть идеи получше?

5
задан Fletch 17 January 2011 в 14:13
поделиться