新int [100]和新int [100]()之间的差异;

问题描述 投票:0回答:2

作为标题

#include <iostream>
int main() {
    auto* a = new float[1000000];
    auto* b = new float[10]();
    for(auto i=0; i<1000000; i++){
        std::cout << "a" << a[i] << std::endl;
    }
    for(auto i=0; i<10; i++){
        std::cout << "b" << b[i] << std::endl;
    }
    return 0;
}

有什么区别?我试过两个输出均为零。

c++ new-operator
2个回答
4
投票

new int[100]执行default initialization,所有元素将被初始化为不确定的值。请注意,阅读它们会导致UB,一切皆有可能。

  • 否则,什么也不做:具有自动存储持续时间的对象(及其子对象)被初始化为不确定的值。

[new int[100]()执行value initialization,因为所有元素的效果都是zero-initialized0

3)如果T是数组类型,则数组的每个元素都将被值初始化;

4)否则,对象将被初始化为零。


0
投票

在C ++中使用new时,它是manual内存分配。您的变量位于heap中。通常,当您声明一个新变量时,它将被添加到堆栈中,并在声明该变量的函数到达return之后实际上消失了。使用new,变量将在函数超出范围后保留。

此处有更多信息:Stack Memory vs Heap Memory

© www.soinside.com 2019 - 2024. All rights reserved.