将共享ptrs设置为null

时间:2017-07-25 12:50:26

标签: c++

假设我有一个班级角色,我有:

shared_ptr<Character> c;

作为课程A中的字段。在A的构造函数中,我可以这样做:

A::A(..):c{nullptr}

这有效吗?那么如何在MIL中正确初始化共享ptr呢?

4 个答案:

答案 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)

只需使用空括号:

A::A() :
c()
{
}

这将是default initialise实例。

或完全放弃初始化。

A::A() = default或者只是完全删除构造函数。