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

这篇具有很好参考价值的文章主要介绍了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;
}

运行以上程序:
C/C++ new A与new A()的区别,C/C++,c语言,c++,开发语言
对于非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;
}

运行以上程序:
C/C++ new A与new A()的区别,C/C++,c语言,c++,开发语言
如果该类型有用户自定义的构造函数,则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/C++,c语言,c++,开发语言文章来源地址https://www.toymoban.com/news/detail-599645.html

到了这里,关于C/C++ new A与new A()的区别的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • new/delete与malloc/free的区别

    new、delete是C++中的操作符,而malloc、free是标准库函数。 new 和 delete 是类型安全的,它们能够根据要分配的对象类型进行内存分配和释放,并调用相应的构造函数和析构函数。而 malloc 和 free 则是无类型的,它们只关注分配和释放指定大小的内存块。 new 操作符会自动计算要分

    2024年02月10日
    浏览(40)
  • golang中make与new有什么区别?

    记录下go语言中函数 new 与 make 的使用和区别,关于go语言中 new 和 make 是内建的两个函数,主要用来创建分配类型内存。 在Go语言中, make 是一个用于创建切片、映射(map)和通道(channel)等引用类型的内置函数。 make 的主要作用是为这些引用类型分配内存并进行初始化。

    2024年01月18日
    浏览(28)
  • java中Lists.newArrayList和new ArrayList的详细区别?

    下面是对Lists.newArrayList()和new ArrayList()的详细区别进行举例说明: 创建具有初始数据的列表: java Copy code import com.google.common.collect.Lists; ListString list1 = Lists.newArrayList(\\\"apple\\\", \\\"banana\\\", \\\"orange\\\"); ListString list2 = new ArrayList(Arrays.asList(\\\"apple\\\", \\\"banana\\\", \\\"orange\\\")); 在这个例子中,Lists.newArray

    2024年01月25日
    浏览(30)
  • Golang中的New和Make:内存分配与初始化的区别

    摘要:本文将深入探讨Golang中的 New 和 Make 函数在内存分配和初始化方面的区别。我们将通过理论阐述和示例代码来解释这两个函数的作用,并帮助读者更好地理解它们在实际编程中的应用。 在Golang中, New 和 Make 是用于内存分配和初始化的重要函数。虽然它们都涉及到内存

    2024年02月08日
    浏览(32)
  • Java中==和equals的区别,包装类对比、String和new String

            对于这个问题,我们得了解基本类型和引用类型在内存中的结构,具体如下: 引用对象句柄访问: 引用对象直接指针访问:           可以看出,无论哪种方式访问基本类型和引用类型的实例数据,基本类型的内存上是保存值,而引用类型的内存上是保存指针

    2024年02月11日
    浏览(40)
  • 嵌入式刷题(day2 new delete 和malloc free的区别)

    本篇文章我们来讲解一下new delete 和malloc free的区别,这个区别在许多面试题中也会经常问到,那么我们就具体的来看看他们有什么不同吧。 new 和 delete 是 C++ 中的运算符,用于动态分配和释放内存空间,而 malloc 和 free 是 C 语言中的函数,用于同样的目的。下面是它们之间的

    2024年02月13日
    浏览(36)
  • 【Java】后端开发语言Java和C#,两者对比注解和属性的区别以及作用

    欢迎来到《小5讲堂》 大家好,我是全栈小5。 这是《Java》序列文章,每篇文章将以博主理解的角度展开讲解, 特别是针对知识点的概念进行叙说,大部分文章将会对这些概念进行实际例子验证,以此达到加深对知识点的理解和掌握。 温馨提示:博主能力有限,理解水平有限

    2024年01月16日
    浏览(51)
  • 【C++】深入探讨内存管理:malloc/free与new/delete的区别以及如何避免内存泄漏

    在软件开发中,正确处理内存管理是至关重要的一环。在C++编程中,我们经常会用到动态内存管理的工具,比如 malloc/free 和 new/delete 。本文将深入探讨 malloc/free 与 new/delete 之间的区别,以及如何有效地避免内存泄漏问题。 都是用于从堆上申请空间,并需要手动释放。 mallo

    2024年02月22日
    浏览(52)
  • Go语言之流指针类型,new函数

    计算机中所有的数据都必须放在内存中,不同类型的数据占用的字节数不一样,例如 int 占用 4 个字节。为了正确地访问这些数据,必须为每个字节都编上号码,就像门牌号、身份证号一样,每个字节的编号是唯一的,根据编号可以准确地找到某个字节。 我们将内存中字节的

    2024年02月16日
    浏览(36)
  • [JVM]String str1 = new String(“yhz“)和 String str2 = “yhz“ 的区别

    为什么str1== str2 就返回true,而str1==str3 就返回false?先看内存图解释 String str1=new String(“yhz”)和String str2=“yhz”,都会先去字符串常量池中查看是否已经存在“yhz”,如果存在则直接使用,如果不存在则会在字符串常量池中创建“yhz”。 String str1 = new String(“yhz”) 还会通过

    2024年02月16日
    浏览(45)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包