关于delete 和 new

关于new和delete,有如下代码

// new_test.cpp

#include<iostream>

using namespace std;

class A
{
public:
    A()
    {
        cout << "A()" << endl;
    }
    int data;
};

class B
{
public:
    int data;
};

int main()
{

    A *a1 = new A;
    cout << "a1->data = " << a1->data << endl;

    A *a2 = new A();
    cout << "a2->data = " << a2->data << endl;

    cout << "----- 以下没有提供默认构造 -----" << endl;
    
    B *b1 = new B;
    cout << "b1->data = " << b1->data << endl;
    
    B *b2 = new B();
    cout << "b2->data = " << b2->data << endl;
    

    return 0;
}

先是在乌班图下运行:

g++ new_test.cpp

./a.out

可以看出不管是有没有默认的构造函数,data都会被初始化。

关于 new A        new A()      new A(a)  的区别

据说在Windows下结果就不一样了。电脑没有安装vs无法实验,但在公司的电脑上能看出区别 (好吧,程序有点不一样,但只是分割线那里不一样。其他都一样)

先说windows下的结论:

类型

new A

new A()

new A(a)

内置类型 以int为例

不会初始化

初始化为0

用自定义的构造函数初始化

class/struct

若人为提供了构造函数,则会调用。 若没有提供构造函数,也不会初始化

若人为提供了构造函数,则会调用 若没有提供构造函数,则调用系统提供的默认的构造函数

用自定义的构造函数初始化

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏月色的自留地

Python2中文处理纪要

1705
来自专栏欧阳大哥的轮子

深入解构iOS系统下的全局对象和初始化函数

事件源于接入了一个第三方库导致应用出现了大量的crash记录,很奇怪的是这么多的crash居然没有收到用户的反馈信息! 在这个过程中每个崩溃栈的信息都明确的指向...

1992
来自专栏互联网杂技

堆,栈,内存泄露,内存溢出介绍

简单的可以理解为: heap(堆):是由malloc之类函数分配的空间所在地。地址是由低向高增长的。 stack(栈):是自动分配变量,以及函数调用的时候所使用...

4014
来自专栏IT技术精选文摘

深入浅出Java 10的实验性JIT编译器Graal

1665
来自专栏salesforce零基础学习

salesforce 零基础学习(二十四)解析csv格式内容

salesforce中支持对csv格式的内容批量导入,可以使用dataloader,然而有些情况下,当用户没有相关权限使用dataloader导入情况下,就的需...

23010
来自专栏云霄雨霁

在现有线程安全类中添加功能

1744
来自专栏向治洪

类加载器原理

1.类的加载过程   JVM将类加载过程分为三个步骤:装载(Load),链接(Link)和初始化(Initialize)链接又分为三个步骤,如下图所示: ?...

2118
来自专栏前端真相

为什么数组下标是从0开始?

数组寻址——arr[i] = base_address + i * type_size(1)

2486
来自专栏编程

大神用Python编写虚拟机解释器

群内不定时分享干货,包括最新的python企业案例学习资料和零基础入门教程,欢迎初学和进阶中的小伙伴入群学习交流 ? 环境介绍 环境采用带桌面的Ubuntu L...

2048
来自专栏醉梦轩

Python和JavaScript中的生成器与协程

Python和JavaScript中都有生成器(Generator)和协程(coroutine)的概念。本文通过分析两者在这两种语言上的使用案例,来对比它们的差...

2352

扫码关注云+社区

领取腾讯云代金券