#include <memory>
#include <unordered_map>
#include <vector>
#include <utility>
#include <boost/ptr_container/ptr_deque.hpp>
struct T
{
T() = default;
T(T const &) = delete;
T & operator = (T const &) = delete;
T(T &&) = default;
T & operator = (T &&) = default;
};
using S = boost::ptr_deque < T >;
int main()
{
std::unordered_map < uint32_t, S > testum;
// testum.emplace(1u, S());
// testum.insert(std::make_pair(1u, S()));
testum[1].push_back(new T());
}
在上面的示例中,注释掉的行不会编译,因为它们试图复制ptr_deque
不可复制的元素。但是,push_back
表格有效。
我在想那operator [] (K const &)
只是return emplace(k, mapped_type()).first->second
or return insert(value_type(k, mapped_type())).first->second
,本质上是注释掉的语句
显然情况并非如此。是否在内部operator []
执行一些placement new
魔术?
还是有什么特别之处ptr_deque
?
我正在使用 gcc-6.1 & boost 1.59