1
vector<char*> x;

我的代码中有很多向量。但是,我需要删除它们以最大程度地减少内存使用。我知道有一个解决方案,比如使用“shared_array”,但我不允许导入任何其他库。使用向量后有什么好的解决方案可以防止内存泄漏?

4

3 回答 3

3

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

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

于 2012-05-05T20:07:38.090 回答
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 特性,你也可以滚动你自己的智能指针类型,应该不会太难。例如,请参阅本教程

于 2012-05-05T20:04:59.810 回答
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
于 2012-05-05T20:11:12.777 回答