我对std :: unique_ptr有疑问。
当我们分配不带参数的std :: make_unique()时,会发生什么?
例如,
struct A {
int a, b;
A() {}
A(int w, int e) : a(w), b(e) {}
};
int main() {
A h(1, 2);
std::unique_ptr<A> hello = std::make_unique<A>();
std::cout << hello->a << std::endl;
}
在上面的代码中,我提到了默认构造函数,我将hello-> a的输出作为垃圾值(随机负值)
但是, 当我如下更改结构时,
struct A {
int a, b;
A() {a=0;b=0;}
A(int w, int e) : a(w), b(e) {}
};
hello-> a的结果值为0。
为什么使用std :: make_unique()时默认构造函数未将int分配为0?
答案 0 :(得分:2)
传递给std::make_unique<A>()
的参数是传递给A
的相应构造函数的参数。这里没有提供任何内容,因此将调用A
的默认构造函数。
为什么使用std :: make_unique()时默认构造函数未将int分配为0?
未初始化的内置类型成员将使用不确定的值。此行为与std::unique_ptr
或std::make_unique
无关;这就是默认初始化内置类型的方式。
初始化它们:
struct A {
int a, b;
A(): a(0), b(0) {}
A(int w, int e) : a(w), b(e) {}
};