C/C++ new A与new A()的区别

在C++中,POD是“Plain Old Data”的缩写,即“普通旧数据”。POD data是指一种特殊类型的数据结构,它们具有简单的内存布局,没有构造函数、虚函数、私有/保护非静态数据成员,也没有虚继承等特性。这些数据结构可以直接通过内存拷贝进行复制,而无需进行特殊的初始化或析构。

对于POD类型,new A是默认初始化的,而new A()是值初始化的:

#include 
using namespace std;

int main() {
    int *i1 = new int;
    int *i2 = new int();

    cout << *i1 << endl;
    cout << *i2 << endl;
}

运行以上程序:
在这里插入图片描述
对于非POD的class类型,有两种情况,第一种情况是该类型没有用户定义的构造函数,此时new A会默认初始化类中成员,new A()会值初始化类中成员:

#include 
using namespace std;

class A {
public:
    int i;
    string s;
};

int main() {
    A* obj1 = new A;   
    A* obj2 = new A(); 

    cout << obj1->i << " " << obj1->s << "end" << endl;
    cout << obj2->i << " " << obj2->s << "end" << endl;
}

运行以上程序:
在这里插入图片描述
如果该类型有用户自定义的构造函数,则new A和new A()都会默认初始化类中成员:

#include 
using namespace std;


class A {
public:
    A() {
        cout << "in A's constructor" << endl;
    }

    int i;
    string s;
};

int main() {
    A* obj1 = new A;   
    A* obj2 = new A(); 

    cout << obj1->i << " " << obj1->s << "end" << endl;
    cout << obj2->i << " " << obj2->s << "end" << endl;
}

运行以上程序:
在这里插入图片描述

你可能感兴趣的:(C/C++,c语言,c++,开发语言)