我看到,在一些奇怪的方式使用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保留的。 –
命名空間範圍有兩個空的語句/聲明。兩個函數關閉後的兩個分號是錯誤的。 –