Ste*_*ski 2 c++ string dynamic-memory-allocation
我知道动态内存比设置固定大小的数组和使用它的一部分更有优势.但是在动态内存中,您必须输入要存储在数组中的数据量.使用字符串时,您可以根据需要键入任意数量的字母(甚至可以使用字符串表示数字,然后使用函数转换它们).这个事实让我觉得与字符串相比,字符数组的动态内存已经过时了.
所以我想知道使用字符串时有哪些优点和缺点?字符串占用的空间何时释放?是否可以通过删除优先于字符串的优势来释放动态分配的内存?请解释.
std::string 通常包含一个内部动态分配的缓冲区。当您分配数据时,或者如果您推回新数据,并且当前缓冲区大小不够,则会分配一个增加大小的新缓冲区,并将旧数据复制或移动到新缓冲区。然后释放旧缓冲区。
当字符串超出范围时,主缓冲区被释放。如果字符串对象是函数中的局部变量(在堆栈上),它将在当前代码块的末尾解除分配。如果是函数参数,当函数退出时。如果它是类成员,则每当类被销毁时。
字符串的优点是灵活性(自动增加大小)和安全性(更难越过数组的边界)。堆栈上固定大小的字符数组更快,因为不需要动态分配。但是,如果您遇到性能问题,而不是之前,您应该担心这一点。