c++ - 当每个字符串由 "delete"创建时,如何在 "vector<string>"的元素上调用 "new char[]"?

标签 c++ memory-management vector

我有一个 vector 字符串,但是这些字符串是通过为它们分配一个字符数组来创建的。这个数组是用 new 在堆中动态创建的。我知道释放在堆中分配的内存是一种很好的做法,但我不确定应该如何释放此 vector 的内存。

当我尝试做这样的事情时:

for(i = 0; i < myVector.size(); i++)
     delete myVector[i];

它给我这个错误:

Expression must have pointer type

这是我声明 vector 的方式

vector<string> myVector;
char* s1 = new char[2];
s1[0] = 'a';
s1[1] = '\0';
myVector.push_back(s1);
char* s2 = new char[2];
s2[0] = 'b';
s2[1] = '\0';
myVector.push_back(s2);
//etc..

遇到这种情况怎么办?

最佳答案

由于您使用 vector<string>因为std::string对象管理自己的内存,你不需要 delete vector 的元素:字符串复制您在创建时传递给它们的内容。

但是,您需要删除使用 new[] 分配的 C 字符串.您应该在创建 string 后立即执行此操作对象:创建字符串后,可以安全删除字符数据:

char s1 = new char[2];
s1[0] = 'a';
s1[1] = '\0';
myVector.push_back(s1);
delete[] s1;  // Here

请注意,您选择了一种相当迂回的方式来创建字符串:您可以通过调用来完成同样的事情

myVector.push_back("a");

关于c++ - 当每个字符串由 "delete"创建时,如何在 "vector<string>"的元素上调用 "new char[]"?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15260561/

相关文章:

c++ - 在清除之前检查一个 vector ?

c++ - OpenGL 鼠标跟踪(自由线)

c++ - 以不同产品的返回值(value) boost 工厂

iphone - 以编程方式创建的 subview 和 viewDidUnload

c++ - 在宿主结构上设置指针时出现意外结果

c++ - 循环显示图像 vector

c++ - C++中的曲线平滑

c++ - 删除boost归档对象还会删除与其关联的流吗?

iPhone内存警告级别=2

c++ - 如何使用 C++ 解析 vector 的路径