zoukankan      html  css  js  c++  java
  • [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

  • 相关阅读:
    (三)数据预处理过程简介
    (二)数据挖掘需要哪些技术
    (一) 什么是数据挖掘?
    怎样提问呢?
    什么是自我意识
    高效能人士的七个习惯
    “U”型读书法
    CMDB学习之一
    层级选择器
    css选择器
  • 原文地址:https://www.cnblogs.com/SelaSelah/p/2554620.html
Copyright © 2011-2022 走看看