我看到一些代码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 >
. 我初始化了对 key = 0 的值的引用。然后我继续将该引用的内容移动到相同的实例值,所以基本上 unique_ptr 被移动到自身上。这似乎是为了避免创建指向对象的许多实例,如果一个已经存在,它会尝试重用现有的条目实例,然后再次添加它。实际上,赋值隐藏在store
接口内,引用是从get
接口返回的,但整体顺序可以总结在我上面显示的代码中
除了有点奇怪之外,这是有效的用法unique_ptr
吗?