我看到,在一些奇怪的方式使用unique_ptr
一些代码的怪异使用,我不知道它是否甚至法律,尽管它看起来编译在G ++罚款-std=c++0x
的unique_ptr
#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
?
看起来很好(除了最后一行,它什么都不做)。但是要注意,如果你在任何类Unix操作系统上,因为'_t'类型是由POSIX保留的。 –
命名空间范围有两个空的语句/声明。两个函数关闭后的两个分号是错误的。 –