“我想在完成它的工作后清除函数的存储内存”〜>只要您使用具有自动存储持续时间的对象,一切都会得到照顾(在内存管理方面)。当您开始使用动态分配时,内存管理问题就开始了,这使您成为负责清理的人。基本上:每new
一个你调用的 adelete
都应该被调用,每new[]
一个你调用的 adelete[]
都应该被调用。因此,如果可以,请尽可能避免动态分配内容。
现在请注意,您的函数按值采用第二个参数:
vector<customers> process(char* const *filename, vector<int> ID)
因此,当您将std::vector<int>
对象传递给函数时,会创建此向量的副本。同样filename
以 of 的形式传递char* const*
似乎比必要的更复杂。在这种情况下,更合理的原型是:
std::vector<customers> process(const char* filename, const std::vector<int>& ID)
现在在这个函数的主体中:
{
std::vector<customers> list_of_customers;
...
return list_of_customers;
}
list_of_customers
是具有自动存储期限的对象。如果没有优化,return
调用时会创建此向量的副本,而原始对象将被正确销毁。然而,有各种优化技术,如 NRVO,可以处理创建的冗余副本,因此您无需担心。如果您将通过以下方式使用此功能:
std::vector<customers> list_of_customers = process(filename, ID);
复制省略很可能会发生,因此即使没有 NRVO,也不会创建任何副本。
看看:什么是复制省略和返回值优化?