我是否需要"new"数组才能稍后执行内存集?在 C++ 中

Do i need to "new" a array in order to do memset later? in c++

本文关键字:内存 执行 C++ 是否 new 数组      更新时间:2023-10-16

例如

我有字符str[1024];

我以后会做memset(str,0,1024);

可以吗?或我需要这样做:

char* str = new char[1024];

谢谢。

两者都分配空间,因此两者都可以使用内存集。两者之间的区别在于空间的分配位置。

char str[1024];

堆栈上分配字符串,一旦超出范围,字符串就会消失。

char* str = new char[1024];

在堆上分配字符串,并将永远存在,直到您删除[]它。

正如@HostileFork已经指出的,你可能想要std::string这里。如果你正在做的任何事情不是特别像字符串,那么你可能需要std::vector<char> str(1024);

无论哪种方式,您都非常确定您不想要new char[1024](C++早期的遗留物,如果存在其他设施,可能根本不会使用该语言(,并且可能也不想要char str[1024];,尽管至少有一些可能性,这个不是一个严重的错误。

直接回答:否。

更好的答案: 不要在C++中使用内存集。 老实说,你可能也不应该在 C 中使用 memset,至少不应该用于它常用的所有事情。 特别是在C++中,将所有字节设置为 0 并不总是"清空"变量的正确方法。甚至是一个数组。 从技术上讲,C 也是如此,但 memset 背后有几十年的滥用......没有人会做出行为不同的实现。

str ings存储在字符数组中并使用memset设置它们不是惯用C++。

(注意:我确实经常使用惯用这个词。

说到我是多么的破纪录,我恳求你阅读Bjarne Stroustrup的这篇短文:

学习标准C++作为一门新语言

不要(太(害怕向 StackOverflow 老手展示您正在处理的问题的更多背景,因为您可能会对他们建议的代码进行酷炫的重新想象和改进感到惊讶......

为了使这更像一个答案,您的声明可能应该为:

std::string str;

不必管理大小,可以按值将其返回到调用范围(或不返回(。