我想在每次使用后释放以下载体:
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);
我所拥有的一些向量正在累积每秒循环几兆字节,我真的不希望这样,因为我想在一些非高功能的机器中使用我的应用程序。
然后,如何释放这些载体?
答案 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