这些构造函数是否正确?

时间:2016-12-02 16:59:50

标签: c++ c++14 move shared

这些构造函数是否正确?

它们是否形成良好并且正确地重载了​​左值和右值?

std::shared_ptr<std::string> data;

// lvalue constructor
Obj(std::string const & p_data)
    : data {std::make_shared<std::string>(p_data)}
{}

// rvalue constructor
Obj(std::string && p_data)
    : data {std::make_shared<std::string>(std::move(p_data))}
{}

1 个答案:

答案 0 :(得分:0)

Obj(std::string const & p_data)
    : data {std::make_shared<std::string>(p_data)}
{}

您确定要从std::stringObj进行隐式转换吗?如果,请考虑制作构造函数explicit

// Prevent *implicit* conversions from std::string to Obj
explicit Obj(std::string const& p_data)
    : data{std::make_shared<std::string>(p_data)}
{}