如何在不导入任何库的情况下删除矢量

时间:2012-05-05 20:03:12

标签: c++ string pointers vector

vector<char*> x;

我的代码中有很多向量。但是,我需要删除它们以最小化内存使用。我知道有一个解决方案,比如使用&#34; shared_array&#34;但我不允许导入任何其他库。有没有什么好的解决方案可以在使用向量后防止内存泄漏?

3 个答案:

答案 0 :(得分:3)

在您的代码段中,您使用的是char指针向量。我假设这些指针是通过new分配的,它们需要通过删除来释放。如果向量超出范围,它将被释放,但所有这些char数组都不会被释放。您需要手动释放它们。

另一种方法是使用std::string,特别是vector<std::string>。这样,当向量超出范围时,所有字符串都将被自动删除。

答案 1 :(得分:2)

C ++ 11支持智能指针对象,例如shared_ptr,因此您不必使用Boost(或其他任何东西)。

正如johnathon所说,你可以用智能指针包裹char *等等,你不必再担心它了。

std::vector<std::unique_ptr<char*>> x; 

std::vector<std::shared_ptr<char*>> x; 

当以任一方式(.delete().erase(),...)从向量中移除元素时,或者仅仅在向量被销毁时,您的缓冲区将被释放。

如果您的STL实现或编译器还不支持此C ++ 11功能,您也可以使用自己的智能指针类型,这应该不会太难。请参阅示例this tutorial

答案 2 :(得分:0)

您可以使用

//Create
vector<char*>* _vec = new vector<char*>(5);
//Fill with something
for(unsigned int i=0; i<_vec->size(); ++i)
    (*_vec)[i] = new char[100];
....

//Delete
for(unsigned int i=0; i<_vec->size(); ++i)
    delete[] (*_vec)[i]; //Deleting array of char
delete _vec; //but not delete[] as we deleting only one instance of vector