加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

c – 快速开启新/删除和分配/免费

发布时间:2020-12-16 09:41:39 所属栏目:百科 来源:网络整理
导读:我有一个关于new / delete运算符与alloc / free相比的问题. 当动态地为char *分配内存时,我通常使用calloc,所以所有保留位都设置为零,所以我不必费心无效. char * string = new char [20]是否仅保留20个具有char大小的项目,还是将该memoryarea中的所有位设置
我有一个关于new / delete运算符与alloc / free相比的问题.

当动态地为char *分配内存时,我通常使用calloc,所以所有保留位都设置为零,所以我不必费心无效.

char * string = new char [20]是否仅保留20个具有char大小的项目,还是将该memoryarea中的所有位设置为零?

如果没有,可以在此内存上使用memset来实现这一目标吗?
如果memset或任何其他可能将分配的内存归零的方法,新的运算符是否可以为本机char类型重载以自行完成这项工作?

解决方法

当你使用:

string = new char[20];

分配的数组未初始化.要默认初始化它,您必须使用:

string = new char[20]();  // Allocates and initializes all members to 0

这在C03§5.3.4/ 15中说明:

A new-expression that creates an object of type T initializes that object as follows:

If the new-initializer is of the form (),the item is
value-initialized (8.5);

至于你的第二个问题 – 是的,你可以使用memset用你想要的任何值填充内存.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读