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
将构造函数设置为默认值相当于:
Run Code Online (Sandbox Code Playgroud)MyClass() : var{}, ptr{}, array{}, data{}, smart_ptr{} {}
不它不是.
这条线
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默认构造函数将使用默认默认构造函数进行零初始化,而默认情况下将使用用户提供的默认构造函数进行初始化.