在c ++中以这种方式创建字符串数组是否正确?

时间:2013-06-03 19:11:32

标签: c++ arrays string malloc

在c ++中以这种方式创建 n string 数组是否正确?

string *a = (string*)malloc(sizeof(string)*n);
...
free(a);

3 个答案:

答案 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];

不需要删除