详解C/C++中new A与new A()的区别

 更新时间:2023年07月20日 08:34:54   作者:吃着火锅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()区别内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • C++实践数组类运算的实现参考

    C++实践数组类运算的实现参考

    今天小编就为大家分享一篇关于C++实践数组类运算的实现参考,小编觉得内容挺不错的,现在分享给大家,具有很好的参考价值,需要的朋友一起跟随小编来看看吧
    2019-02-02
  • C语言实现销售管理系统设计

    C语言实现销售管理系统设计

    这篇文章主要为大家详细介绍了C语言实现销售管理系统设计,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2022-03-03
  • C++概念重载、覆盖、隐藏的使用说明

    C++概念重载、覆盖、隐藏的使用说明

    本篇文章介绍了,在C++中概念重载、覆盖、隐藏的使用分析说明。需要的朋友参考下
    2013-05-05
  • Visual Studio添加第三方库的实现步骤

    Visual Studio添加第三方库的实现步骤

    使用Visual Studio编写C语言程序能够提供全面而强大的开发环境,本文主要介绍了Visual Studio添加第三方库的实现步骤,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2023-07-07
  • C++ windows LOG4plus的使用小结

    C++ windows LOG4plus的使用小结

    这篇文章主要介绍了C++ windows LOG4plus的使用小结,本文通过图文示例代码相结合给大家介绍的非常详细,感兴趣的朋友跟随小编一起看看吧
    2024-05-05
  • C语言中判断int,long型等变量是否赋值的方法详解

    C语言中判断int,long型等变量是否赋值的方法详解

    声明了int ,long型等局部变量,在利用一些方法给这些变量赋值之后,想判断这些变量是不是真的被赋初值了,怎么办
    2013-07-07
  • C++生成随机浮点数的示例代码

    C++生成随机浮点数的示例代码

    在C++11之前,我们通常采用rand函数来生成随机数,但rand函数对一些情况显得难以处理。本文将介绍如何利用C++生成随机浮点数,需要的可以参考一下
    2022-04-04
  • C++表达式new与delete知识详解

    C++表达式new与delete知识详解

    这篇文章主要为大家详细介绍了C++表达式new与delete知识点,学习如何动态创建对象,动态创建的对象与一般对象的区别,动态创建的对象的初始化以及释放动态分配的内存等知识点,感兴趣的朋友可以参考一下
    2016-05-05
  • 基于C中含有if的宏定义详解

    基于C中含有if的宏定义详解

    本篇文章是对C中含有if的宏定义进行了详细的分析介绍,需要的朋友参考下
    2013-05-05
  • C语言if选择结构语句详解

    C语言if选择结构语句详解

    大家好,本篇文章主要讲的是C语言if选择结构语句详解,感兴趣的同学赶快来看一看吧,对你有帮助的话记得收藏一下,方便下次浏览
    2021-12-12

最新评论