std :: vector - 如何释放向量中char*元素的内存?

use*_*812 2 c++ memory vector std

请考虑以下C++代码:

using namespace std;
vector<char*> aCharPointerRow;
aCharPointerRow.push_back("String_11");
aCharPointerRow.push_back("String_12");
aCharPointerRow.push_back("String_13");
for (int i=0; i<aCharPointerRow.size(); i++)  {
   cout << aCharPointerRow[i] << ",";
}
aCharPointerRow.clear();
Run Code Online (Sandbox Code Playgroud)

在该aCharPointerRow.clear();行之后,aCharPointerRow应该删除所有字符指针元素.

上面的C++代码中是否存在内存泄漏?我是否需要显式释放分配给char*字符串的内存?如果有,怎么样?

谢谢你的任何建议.

Alo*_*ave 7

上面的C++代码中是否存在内存泄漏?
没有内存泄漏.

既然你从未使用过new你就不需要打电话delete.如果首先分配了dynamicmemory,你只需要释放它.

请注意,理想情况下,您应该使用vector std::string.

std::vector<std::string> str;
str.push_back("String_11");
str.push_back("String_12");
str.push_back("String_13");
Run Code Online (Sandbox Code Playgroud)

你可以使用std :: string.c_str(),以防你需要获得底层字符指针(char *),这是很多C api期望的参数.


xan*_*tos 5

你正在推动你的矢量字符串文字(字符串"...").这些不是由您分配的.它们由C++编译器/运行时提供给您,它们的生命周期等于应用程序的生命周期,因此您不能/不能释放它们.

请参阅示例范围(字符串)文字

请注意,我告诉你的一切都是基于你使用字符串文字的事实.如果你需要分配你的字符串的内存,那么你将不得不使用一些自动解除分配器,如std::unique_ptr(C++ 11)或boost::unique_ptrboost::shared_ptr(Boost)或更好地使用std::stringAls建议的类