详解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语言动态数组的使用实现代码的相关资料,需要的朋友可以参考下
    2017-01-01
  • OpenGL绘制Bezier曲线的方法

    OpenGL绘制Bezier曲线的方法

    这篇文章主要为大家详细介绍了OpenGL绘制Bezier曲线的方法,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2020-04-04
  • 基于C++语言实现机动车违章处罚管理系统

    基于C++语言实现机动车违章处罚管理系统

    这篇文章主要介绍了基于C++语言实现机动车违章处罚管理系统的相关资料,需要的朋友可以参考下
    2016-07-07
  • map插入自定义对象总结

    map插入自定义对象总结

    黑树在插入节点时,必须依照大小比对之后在一个合适的位置上执行插入动作。所以作为关键字,起码必须有“<”这个比较操作符
    2013-09-09
  • C语言中的状态机设计深入讲解

    C语言中的状态机设计深入讲解

    这篇文章主要给大家介绍了关于C语言状态机设计的相关资料,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-11-11
  • c++实现俄罗斯方块游戏代码

    c++实现俄罗斯方块游戏代码

    大家好,本篇文章主要讲的是c++实现俄罗斯方块游戏代码,感兴趣的同学赶快来看一看吧,对你有帮助的话记得收藏一下
    2022-01-01
  • C语言玩转指针之指针的高阶玩法

    C语言玩转指针之指针的高阶玩法

    指针可以表示一个变更的地址,在计算机程序中,通常表示内存地址,存储数据的地址,下面这篇文章主要给大家介绍了关于C语言玩转指针之指针的高阶玩法,文中通过示例代码介绍的非常详细,需要的朋友可以参考下
    2021-10-10
  • c++ 梅森数源码示例解析

    c++ 梅森数源码示例解析

    这篇文章主要为大家介绍了c++ 梅森数源码示例解析,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2022-12-12
  • C++ vtordisp的应用场景分析

    C++ vtordisp的应用场景分析

    文章介绍了C++中的vtordisp机制,用于在虚继承和虚函数结合的场景下,确保构造函数和析构函数中对虚基类指针的正确调整,文章详细解释了vtordisp的基本概念、应用场景以及编译器相关的考虑,感兴趣的朋友一起看看吧
    2025-01-01
  • C++获取数组大小和多维数组操作详解

    C++获取数组大小和多维数组操作详解

    这篇文章主要介绍了C++获取数组大小和多维数组的操作,文中通过代码示例介绍的非常详细,对大家的学习或工作有一定的帮助,需要的朋友可以参考下
    2024-04-04

最新评论