2

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

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

3 回答 3

15

不,这是不正确的。malloc不调用构造函数std::stringmalloc所做的只是分配内存并使内存未初始化。至少你会想要使用new. 但是,创建字符串数组的最佳方法是使用std::vector

std::vector<std::string> a(n);

现在您不再需要担心内存管理。

于 2013-06-03T19:15:21.867 回答
7

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

只需使用这个:

  std::string a[n];

或者,

  std::vector<std::string> a;

因为 C++ 字符串将动态分配内存以在内部保存字符,所以无论包含多少字符,std::string 的“sizeof”通常非常小(可能是 16 个字节)。因此(与 C 中的字符串处理通常涉及广泛的 malloc/free 噩梦不同)通常不需要动态分配字符串。

于 2013-06-03T19:16:44.967 回答
1

尝试

string *a = new string[SIZE];

并释放它:

delete [] a;

在没有指针的情况下做到这一点要容易得多:

string a[n];

无需删除

于 2013-06-03T19:15:22.017 回答