странное использование unique_ptr

Я вижу некоторый код, который использует unique_ptr в некоторых странных отношениях, я не уверен, что это даже законно, хотя кажется, что он хорошо компилируется на g ++ с -std=c++0x

#include <memory>
#include <boost/unordered_map.hpp>

typedef std::unique_ptr< std::string > str_ptr_t;

typedef boost::unordered_map< int , str_ptr_t > map_t;

str_ptr_t& get_ptr_value(map_t& map, int key)
{
return map[key];
};

int main()
{
map_t map;
str_ptr_t& ref_to_value_of_0 = get_ptr_value(map, 0);
map[0] = std::move(ref_to_value_of_0);
};

Вкратце, тип значения карты unique_ptr< std::string >, Я инициализирую ссылку на значение ключа = 0. Затем я перехожу к перемещению содержимого этой ссылки к тому же значению экземпляра, поэтому в основном unique_ptr перемещается на себя. Кажется, что для того, чтобы избежать создания многих экземпляров указанного объекта, предпринимается попытка повторно использовать существующий экземпляр записи, если он уже существует, а затем добавить его снова. На самом деле задание скрыто внутри store интерфейс, и ссылка возвращается из get интерфейс, но общая последовательность может быть обобщена в коде, который я показываю выше

Помимо того, что это немного странно, это правильное использование unique_ptr?

0

Решение

Назначение перемещения определяется в терминах сброса и выпуска, и поэтому оно по сути делает это:

ref_to_value_of_0.reset(ref_to_value_of_0.release())

Если вы поймете, как это оценивается, вы обнаружите, что это безопасное «бездействие». Он освобождает собственный указатель, освобождает нулевое значение, а затем устанавливает свой указатель обратно в исходное значение.

Я не очень понимаю, почему вы это делаете, хотя.

4

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]