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

Jay*_*man 2 c++ arrays string malloc

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

string *a = (string*)malloc(sizeof(string)*n);
...
free(a);
Run Code Online (Sandbox Code Playgroud)

Jes*_*ood 15

不,那是不对的.malloc不调用构造函数std::string,所有malloc都是分配内存并使内存保持未初始化.至少你会想要使用new.但是,创建字符串数组的最佳方法是使用std::vector:

std::vector<std::string> a(n);
Run Code Online (Sandbox Code Playgroud)

现在您再也不用担心内存管理了.


Rod*_*ddy 7

不,你的字符串从未真正构建过.不像new,malloc()不构造对象 - 它只是分配内存.

只要用这个:

  std::string a[n];
Run Code Online (Sandbox Code Playgroud)

要么,

  std::vector<std::string> a;
Run Code Online (Sandbox Code Playgroud)

因为C++字符串将动态分配内存以在内部保存字符,所以std :: string的'sizeof'通常非常小(可能是16个字节),而不管包含的字符数是多少.所以(与C不同,字符串处理通常涉及广泛的malloc /免费噩梦),通常不需要动态分配字符串.