声明std::unique_ptr<std::string>
但未指定它(因此它包含一个std::nullptr
) - 如何为其赋值(即我不再希望它保持{{1} }})?这两种方法都没有尝试过。
std::nullptr
其中std::unique_ptr<std::string> my_str_ptr;
my_str_ptr = new std::string(another_str_var); // compiler error
*my_str_ptr = another_str_var; // runtime error
是先前声明和分配的another_str_var
。
显然,我对std::string
正在做的事情的理解非常不合适......
答案 0 :(得分:20)
您可以在C ++ 14中使用std::make_unique
来创建和移动分配而不使用明确的new
,或者必须重复类型名称std::string
my_str_ptr = std::make_unique<std::string>(another_str_var);
你可以reset它,用新的替换托管资源(在你的情况下,虽然没有发生实际的删除)。
my_str_ptr.reset(new std::string(another_str_var));
您可以创建一个新的unique_ptr
并将其移动到您的原始版本中,但这总是让我感到麻烦。
my_str_ptr = std::unique_ptr<std::string>{new std::string(another_str_var)};