#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とブースト1.59を使用しています