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