c++ new关于new的问题

(点击上方公众号可快速关注)

我们在C++程序中经常看到两种new的使用方式:new A以及new A()。那么这两种究竟有什么区别呢

调用new分配的内存有时候会被初始化,而有时候不会这依赖于A的类型是否是POD(Plain old data)类型,或者它是否是包含POD成员、使用编译器生成默认构造函数的类

POD是Plain old data的缩写,它是一个struct或者类且不包含构造函数、析构函数以及虚函数。

维基百科给出了更加详细的解释:

C++的POD类型或者是一个标量值或者是一个POD类型的类。POD class没有用户定义的析构函數、拷贝构造函数和非静态的非POD类型的数据成员而且,POD class必须是一个aggregate没有用户定义的构造函数,没有私有的或者保护的非静态数据没囿基类或虚函数。它只是一些字段值的集合没有使用任何封装以及多态特性。

接着介绍一下C++中的三种初始化方式:

C++03标准中针对这三种方式的说明:

采用如下代码可以验证编译器遵循的到底是哪一种标准:

在VS008中输出就不是0说明遵循的是98标准。

下面先看一段C++示例代码:

上述測试平台是VS2008.需要注意的是VS08只支持C++98。

new A:不确定的值

new B:默认构造(B::m未被初始化)

new B():默认构造(B::m未被初始化)

如果用兼容C++03的编译器比如G++结果:

new A:不确定的值

new B:默认构造(B::m未被初始化)

在所有C++版本中,只有当A是POD类型的时候new A和new A()才会有区别。而且C++98和C++03会有区别。

觉得本文有帮助請分享给更多人

看更多精选C/C++技术文章

}

我要回帖

更多关于 c++ new 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信