如何在不导入任何库的情况下删除矢量
How to delete a vector without importing any library
vector<char*> x;
我的代码中有很多向量。但是,我需要删除它们以最大程度地减少内存使用。我知道有一个解决方案,比如使用"shared_array",但我不允许导入任何其他库。有没有好的解决方案可以防止使用矢量后内存泄漏?
在代码片段中,您使用的是字符指针向量。我假设这些指针是通过 new 分配的,并且需要通过删除来释放它们。如果向量超出范围,它将被释放,但所有这些字符数组都不会被释放。您需要手动释放它们。
另一种方法是使用std::string
,特别是vector<std::string>
。这样,当向量超出范围时,所有字符串将自动删除。
C++11 支持智能指针对象,例如 shared_ptr
,因此您不必使用 Boost(或其他任何东西)。
正如 johnathon 所说,然后你可以用一个智能指针包裹char *
et 瞧,你不必再担心它了。
std::vector<std::unique_ptr<char*>> x;
或
std::vector<std::shared_ptr<char*>> x;
当元素以任何一种方式(.delete()
、.erase()
、...)或简单地当向量被破坏时从向量中删除时,缓冲区将被释放。
如果你的 STL 实现或编译器还不支持这个 C++11 功能,你也可以推出自己的智能指针类型,这应该不会太难。例如,请参阅本教程。
您可以使用
//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
相关文章:
- 如何在不强制转换每个参数的情况下删除初始值设定项列表中从 int 到 char 的缩小转换?
- 类(可能是代理)的命名,允许在不修改基础容器的情况下对项目进行排序和删除
- 在不使用任何 STL 容器的情况下删除重复项
- 如何在不泄漏内存的情况下删除链接列表
- 使用QT,如何在不读取整个文件的情况下删除文本文件中的第一行
- C++ 如何在不丢失内存的情况下删除节点
- 如何在没有递归的情况下删除链接列表
- 在只给定单个链接列表中间的节点的情况下删除该节点.C++
- 在不使用虚拟析构函数的情况下删除继承的对象时中止
- 检查目录树是否可以在不实际开始删除的情况下删除
- 如何在不知道其类型的情况下删除结构
- C++ 在不知道位置的情况下删除矢量中的特定值
- 如何在不导入任何库的情况下删除矢量
- 重写类运算符new并在不更改类的情况下删除
- 如何在无权访问的情况下删除对象
- 我将如何在不损坏列表的情况下删除链表中的节点
- Qmake:如何在不更改Qmake .conf的情况下删除某个项目的编译器标志
- 我可以在不检查是否存储该对象的情况下删除联合组件吗?
- 内存管理 - 是否可以在不调用析构函数的情况下删除 c++ 中的对象
- 我可以在不中断代码的情况下删除此警告吗?