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

Chr*_*let 16 c++ constructor c++14

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

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

    MyClass() = default;
    ~MyClass() = default;
}
Run Code Online (Sandbox Code Playgroud)

将构造函数设置为default等效于:

MyClass() : var{}, ptr{}, array{}, data{}, smart_ptr{} {}
Run Code Online (Sandbox Code Playgroud)

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

我没有括号实例化课程: MyClass obj;

R S*_*ahu 15

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

MyClass() : var{}, ptr{}, array{}, data{}, smart_ptr{} {}
Run Code Online (Sandbox Code Playgroud)

不它不是.


这条线

MyClass() = default;
Run Code Online (Sandbox Code Playgroud)

更接近但不完全等同于:

 MyClass() {}
Run Code Online (Sandbox Code Playgroud)

在任何一种情况下,使用

 MyClass obj;
Run Code Online (Sandbox Code Playgroud)

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

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

 MyClass obj{};
Run Code Online (Sandbox Code Playgroud)

obj默认构造函数将使用默认默认构造函数进行零初始化,而默认情况下将使用用户提供的默认构造函数进行初始化.