C++ 默认构造函数是否将变量初始化为零?
我正在将一个类更新为C++14,并试图找出在构造时将所有实例变量初始化为零的最简单方法。以下是我目前掌握的情况:C++ 默认构造函数是否将变量初始化为零?,c++,constructor,c++14,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; } 。。。
class MyClass {
public:
int var;
float* ptr;
double array[3];
MyStruct data;
unique_ptr<MyStruct> smart_ptr;
MyClass() = default;
~MyClass() = default;
}
。。。还是需要初始化每个变量?(我在VisualStudio中尝试过这两种方法,但我不确定这是否是幸运的。)
我正在实例化没有括号的类:MyClass obj代码>
将构造函数设置为默认值等同于执行以下操作:
MyClass() : var{}, ptr{}, array{}, data{}, smart_ptr{} {}
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{} {}
};
struct MyClassMembers
{
int-var;
浮动*ptr;
双数组[3];
MyStruct数据;
独特的_ptr智能_ptr;
};
结构MyClass:MyClassMembers
{
MyClass():MyClassMembers{}{}
};
然后MyClass m
将使用MyClassMembers{}
初始化成员。伙计,我本来想给你一个自鸣得意的答案,但现在我不确定。又见哈哈:)我知道,对吧!我真的看到了那篇帖子,但正是这条评论让我感到不确定:。因此,如果您根本没有构造函数,调用带有括号的MyClass instance()
,则初始化为零:|从逻辑上讲,将构造函数设置为default
,将默认初始化成员。默认初始化并不总是等同于零初始化。typo:int{}应该是var{}固定的,谢谢!我也很感激你的回答。我认为MyClass(){}
是用户提供的构造函数,而MyClass=default,这对吗
是一个默认构造函数,所以在某些情况下它会初始化为零@ChrisNolet“default constructor”是指一个不需要参数就可以调用的构造函数。我指的是默认构造函数。除非其中一个成员有一个非默认的默认构造函数,如R Sahu的answer@Danra我假设OP对于使用自己定义的构造函数的成员是合适的