Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How to assign a value of a string to a std::unique_ptr<std::string>?

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...

like image 743
Kvothe Avatar asked May 01 '15 18:05

Kvothe


1 Answers

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)};
like image 88
Ryan Haining Avatar answered Sep 27 '22 18:09

Ryan Haining