After declaring an std::unique_ptr<std::string>
but without assigning it (so it contains an std::nullptr
to begin with) - how to assign a value to it (i.e. I no longer want it to be holding std::nullptr
)? Neither of the methods I've attempted work.
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
where another_str_var
is an std::string
that is declared and assigned earlier.
Clearly my understanding of what std::unique_ptr
is doing is woefully inadequate...
You could use std::make_unique
in C++14 to create and move assign without the explicit new
or having to repeat the type name std::string
my_str_ptr = std::make_unique<std::string>(another_str_var);
You could reset it, which replaces the managed resources with a new one (in your case there's no actual deletion happening though).
my_str_ptr.reset(new std::string(another_str_var));
You could create a new unique_ptr
and move assign it into your original, though this always strikes me as messy.
my_str_ptr = std::unique_ptr<std::string>{new std::string(another_str_var)};
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With