搜索

首页  >  问答  >  正文

c++中那个new到底调不调用构造函数哦?

#include <iostream>

using namespace std;
class A
{
public:
    A()
    {
        cout << "called A\n";
    }
};

class B : public A
{

};

int main()
{
    B* ptr = new B;
    int* int_A = new int;
    int* int_B = new int();
    cout << *int_A << endl;
    cout << *int_B << endl;
    return 0;
}

测试代码如上,new B的时候应该是调用了构造函数的吧。但是为什么我new int的时候就不调用了呢?要new int()它才会调用?打印出*int_A就是个随机数啊?请问这是怎么回事?new type,不是三步吗,分别是分配内存,调用构造函数,然后再赋值的吗?

伊谢尔伦伊谢尔伦2773 天前445

全部回复(6)我来回复

  • PHP中文网

    PHP中文网2017-04-17 14:21:43

    每次都是 int_A 随机,int_B0new intnew int() 应该是一样的,Windows 下初始值为随机,*nix 下初始值为 0

    回复
    0
  • 高洛峰

    高洛峰2017-04-17 14:21:43

    int a;
    int b = int();

    这里的a是被默认初始化了,它的值是未定义的
    b被值初始化了,它的值是零

    回复
    0
  • 黄舟

    黄舟2017-04-17 14:21:43

    构造函数是对类而言的,而这里的类和对象一般都是指非内置的数据类型,所谓的内置数据类型指的是如int、float
    、char的数据类型,在C++里没有对应的构造函数。

    回复
    0
  • 大家讲道理

    大家讲道理2017-04-17 14:21:43

    int不是类,有构造函数这一说?

    回复
    0
  • 怪我咯

    怪我咯2017-04-17 14:21:43

    int是内置数据类型, 不是类。 所以new int不会调用构造函数。 数值是随机值。
    new integer会调用构造函数, 数值会被初始化为0。 标准定义new int()和new integer行为一致。

    回复
    0
  • 天蓬老师

    天蓬老师2017-04-17 14:21:43

    加括号就强制要求进行初始化(类或者结构体则调用构造函数,如果构造函数是默认的则会去调用默认构造函数)。
    如果没有加括号是有一定区别的,当类只有默认构造函数(无具现化)则不对类进行初始化。
    你可以测试一下在类中加成员变量,然后不加括号,类也只有默认构造函数(不具现化)看下效果。无加括号的并且无明写构造函数的成员变量应该是乱码。

    回复
    0
  • 取消回复