这些构造函数是否正确?这些构造函数是否正确?
它们是否形成良好并正确地重载了左值和右值?
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))}
{}
你肯定'noexcept'? 'make_shared'通常需要分配内存,这是一个不是'noexcept'的操作。 – j6t
@ j6t:完全忘记了'std :: shared_ptr',并专注于'std :: string',哎呀:) –