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)
现在您再也不用担心内存管理了.
不,你的字符串从未真正构建过.不像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 /免费噩梦),通常不需要动态分配字符串.