[英]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.