繁体   English   中英

默认的默认构造函数是否将变量初始化为零?

[英]Does the defaulted default constructor initialize variables to zero?

我正在将类更新为C ++ 14,并试图找出在构造时将所有实例变量初始化为零的最简单方法。 这是我到目前为止所拥有的:

class MyClass {
public:
    int var;
    float* ptr;
    double array[3];
    MyStruct data;
    unique_ptr<MyStruct> smart_ptr;

    MyClass() = default;
    ~MyClass() = default;
}

将构造函数设置为default相当于:

MyClass() : var{}, ptr{}, array{}, data{}, smart_ptr{} {}

...或者我需要初始化每个变量吗? (我已经在Visual Studio中尝试了两种方式,无论哪种方式都得到零,但我不确定这是不是运气。)

我正在实现没有括号的类: MyClass obj;

将构造函数设置为默认值相当于:

 MyClass() : var{}, ptr{}, array{}, data{}, smart_ptr{} {} 

不它不是。


这条线

MyClass() = default;

更接近但不完全等同于:

 MyClass() {}

在任何一种情况下,使用

 MyClass obj;

导致默认初始化对象的成员默认初始化。

但是,使用时它们之间的区别

 MyClass obj{};

obj将使用默认的默认构造函数进行零初始化,而它仍将使用用户提供的默认构造函数进行默认初始化。

要使所有变量在构造时零初始化,即使创建者没有请求它,一种方法是:

struct MyClassMembers
{
    int var;
    float* ptr;
    double array[3];
    MyStruct data;
    unique_ptr<MyStruct> smart_ptr;
};

struct MyClass : MyClassMembers
{
    MyClass(): MyClassMembers{} {}
};

然后是MyClass m; 将使用MyClassMembers{}初始化成员。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM