在 C++ 中以这种方式创建n 字符串数组是否正确?
string *a = (string*)malloc(sizeof(string)*n);
...
free(a);
不,这是不正确的。malloc
不调用构造函数std::string
,malloc
所做的只是分配内存并使内存未初始化。至少你会想要使用new
. 但是,创建字符串数组的最佳方法是使用std::vector
:
std::vector<std::string> a(n);
现在您不再需要担心内存管理。
不,您的字符串从未真正构造过。不像new
,malloc()
不构造对象 - 它只是分配内存。
只需使用这个:
std::string a[n];
或者,
std::vector<std::string> a;
因为 C++ 字符串将动态分配内存以在内部保存字符,所以无论包含多少字符,std::string 的“sizeof”通常非常小(可能是 16 个字节)。因此(与 C 中的字符串处理通常涉及广泛的 malloc/free 噩梦不同)通常不需要动态分配字符串。
尝试
string *a = new string[SIZE];
并释放它:
delete [] a;
在没有指针的情况下做到这一点要容易得多:
string a[n];
无需删除