我有一个 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/