详解C/C++中new A与new A()的区别
作者:吃着火锅x唱着歌
这篇文章主要通过一些简单的示例为大家详细介绍一下C/C++中new A与new A()的区别,文中的示例代码简洁易懂,快跟随小编一起学习起来吧
在C++中,POD是“Plain Old Data”的缩写,即“普通旧数据”。POD data是指一种特殊类型的数据结构,它们具有简单的内存布局,没有构造函数、虚函数、私有/保护非静态数据成员,也没有虚继承等特性。这些数据结构可以直接通过内存拷贝进行复制,而无需进行特殊的初始化或析构。
对于POD类型,new A是默认初始化的,而new A()是值初始化的:
#include <iostream> 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 <iostream> 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 <iostream> 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++中new A与new A()的区别的文章就介绍到这了,更多相关C++ new与new()区别内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!