使用后释放载体的载体

时间:2013-07-16 07:44:46

标签: c++ visual-studio-2010 vector free

我想在每次使用后释放以下载体:

    std::vector<std::array<double,640>> A(480);
    std::vector<std::array<double,640>> B(480);
    std::vector<std::array<double,640>> C(480);
    std::vector<std::array<double,640>> D(480);

我所拥有的一些向量正在累积每秒循环几兆字节,我真的不希望这样,因为我想在一些非高功能的机器中使用我的应用程序。

然后,如何释放这些载体?

2 个答案:

答案 0 :(得分:3)

要释放vector的内容,只需让它超出范围或与其所属的类实例一起销毁(取决于您的具体情况)。

如果你不能等那么久,你总是可以使用好的旧swap-with-empty成语来确保实际释放内存:

std::vector<std::array<double,640>>().swap(A);
// or, nicer version using C++11's decltype, which avoids typing the exact type:
decltype(A)().swap(A);

答案 1 :(得分:3)

如果向量超出范围,则自动释放它占用的内存(包括调用包含对象的析构函数)。因此,如果您有高内存要求,则应确保在尽可能小的范围内使用向量。

举个例子

void reallyGreedyFunc()
{
    // next allocates the memory for 480 fixed size arrays of 640 doubles on the heap
    // only the management structures will be kept on the stack
    std::vector<std::array<double,640>> A(480);

    //... do something
} // A goes out of scope and all the memory it has occupied is released