提问人:Baptiste Girard 提问时间:9/28/2023 更新时间:9/28/2023 访问量:48
关于类的唯一指针的问题(.h VS 构造函数中变量的初始化)
Question about unique pointer of classes (initialisation of variables in .h VS in constructor)
问:
我是一个乞丐,从独特的指针开始,我对它们有一个问题:unique_ptr
如果我有一个类,里面是 .h,我还有一个像这样的类:A
B
class A{
B b;
public:
A();
}
(考虑包含)
如果我想创建一个在这些情况下有什么区别:unique_ptr
A
B
(unique_ptr<A> a = make_unique<A>()
)
案例 1 :
class A{
B b = b(1);
public:
A();
}
和案例 2:
class A{
B b;
public:
A();
}
在 A() 的构造函数中:
A::A() {
b = b(1);
}
他们每个人的内部使用似乎都不同,但我不明白为什么。B
A
答:
2赞
Remy Lebeau
9/28/2023
#1
在情况 1 中,构造时,它直接以 1 初始化。A
A::b
在案例 2 中,构造时,它首先默认初始化,然后为其分配另一个使用 1 初始化的对象。A
A::b
B
这对操作方式没有任何影响。unique_ptr
make_unique()
0赞
Jakkapong Rattananen
9/28/2023
#2
c++ 的构造函数不同于其他 OOP 语言中的构造函数。 它分为两部分。
- 成员初始化。
- 函数体。
#include <iostream>
struct BB{
int num;
BB(int in):num{in}
{
std::cout << "ctor BB value=" << num <<"\n";
}
};
struct AA{
BB b{1};
AA()
{
b = BB{2};
}
};
struct AB{
BB b{1};//default initialization
AB():b{2}//member initialization
{
//function body
}
};
int main() {
std::cout << "-- create AA \n";
AA a{};
std::cout << "value AA.b.num=" << a.b.num << "\n";
std::cout << "-- create AB \n";
AB b{};
std::cout << "value AB.b.num=" << b.b.num << "\n";
}
结果是
-- create AA
ctor BB value=1
ctor BB value=2
value AA.b.num=2
-- create AB
ctor BB value=2
value AB.b.num=2
评论
A
unique_ptr<A>
b
b(1)
B(1)