假设我有一个班级角色,我有:
shared_ptr<Character> c;
作为课程A
中的字段。在A
的构造函数中,我可以这样做:
A::A(..):c{nullptr}
这有效吗?那么如何在MIL中正确初始化共享ptr呢?
答案 0 :(得分:4)
即使您的代码有效,也无需将c
明确设置为nullptr
。
Here您可能会看到可用构造函数的列表。构造函数:
constexpr shared_ptr() noexcept;
constexpr shared_ptr( std::nullptr_t ) noexcept;
做同样的事情:
构造一个没有托管对象的shared_ptr,即空shared_ptr
所以c
的默认初始化非常好,也适合你。
答案 1 :(得分:3)
这有效吗?那么如何在MIL中正确初始化共享ptr呢?
是documentation中所述,按std::shared_ptr
初始化nullptr
是完全有效的。请注意,您可以使用默认构造函数实现相同的功能,但如果您发现这种方式更具可读性,则会以相同的方式初始化std::shared_ptr
:
1-2)构造一个没有托管对象的shared_ptr,即为空 shared_ptr的
答案 2 :(得分:2)
将共享ptrs设置为null
c{nullptr}
这有效吗?
是。这将调用shared_ptr(std::nullptr_t)
构造函数。
其他可能性是值初始化,它调用默认构造函数:c()
。
或者只是在成员初始化列表中没有条目。在成员初始化列表中缺少条目且没有大括号初始值设定项的成员将默认初始化。使用默认构造函数初始化默认初始化类对象。然后,您根本不需要拥有用户定义的构造函数。隐式生成的默认值初始化所有成员,这可能正是您想要的。
答案 3 :(得分:1)