[C++]new Foo 和 new Foo()的区别

原文地址http://unixjunkie.blogspot.com/2009/05/c-new-foo-vs-new-foo.html

翻译加修订

问题是:在C++中,以下两者有何不同

  1. new Foo;
  2. new Foo();

两者都是正确的语句,它们都返回一个指针,指向新创建的Foo(存放在堆中)。但是,当Foo是POD类型时,它们的表现有所不同。

PS:POD类型是指一个类或对象,其成员是原生数值类型(int, unsigned char, float, bool等等)或者另外一个POD类型。POD对象看起来像C语言风格的结构对象,例如:

// POD
class Foo {
    public:
    int a;
};

// NOT a pod
class Bar {
    public:
    int a;
    string name; // not a POD type
};

当Foo是POD类型时,new Foo不会初始化,而new Foo()会将成员初始化为默认值

struct Foo {
    int a;
};
int main() {
    Foo* foo = new Foo;
    foo->a = 7;
    delete foo;
    Foo* new_foo = new Foo;
    printf("new_foo->a = %d\n", new_foo->a);
    delete new_foo;
    return 0;
}

a值将为不定值,编译器不同结果不同。例如在gcc下,a值将为旧值,即第一次赋值后的7。而在vc下,a值将为0xcccccccc。

struct Foo {
    int a;
};
int main() {
    Foo* foo = new Foo();
    foo->a = 7;
    delete foo;
    Foo* new_foo = new Foo();
    printf("new_foo->a = %d\n", new_foo->a);
    delete new_foo;
    return 0;
}

a值将初始化为0

转载于:https://www.cnblogs.com/SelaSelah/archive/2012/06/19/2554620.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值