【问题标题】:How much new initialize the memory to object? [duplicate]多少 new 将内存初始化为对象? [复制]
【发布时间】:2013-07-27 14:06:07
【问题描述】:

我们知道 malloc 提供未初始化内存,而 calloc 将内存初始化为零。那么c++中new操作符在初始化对象的时候给了什么值呢??

【问题讨论】:

  • 它调用对象的默认构造函数。
  • 同样在编译时你的对象应该计算大小(有一些例外),所以它会分配内存(我记得在程序堆中)并调用构造函数,我想。
  • 如果你感到受虐,试试这个:stackoverflow.com/a/620402/1171191

标签: c++


【解决方案1】:

假设对象有一个构造函数,它将调用默认构造函数。

但是诸如intfloatdoublechar 之类的对象,以及所有形式的指针等等,都没有默认构造函数[或“空”默认构造函数],所以什么也得不到为那些完成 - 你会得到new为你得到的内存中的任何东西 - 这可能是零或以前分配的一些旧垃圾。

如果您特别愿意,您可以对new 创建的内存块使用“值初始化”,例如int *a = new int[size](); [零初始化]。

【讨论】:

  • 虽然您可以选择对内置函数进行值初始化:int* i = new int();
  • @juanchopanza:好点 - 添加了一个关于此的部分。
  • @MatsPetersson:你确定12 吗?我认为只能将数组归零。
  • @podkova:正确,我的错误。
【解决方案2】:

New 基本上调用一个对象构造函数,它由你决定如何初始化你的对象。如果不初始化,访问时会得到垃圾值

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-11-24
    • 1970-01-01
    • 1970-01-01
    • 2014-02-06
    • 1970-01-01
    • 2021-10-23
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多