#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
フォームが動作します。差の演算子[](KのCONST&)<Kは、ptr_deque < T > ::ブースト>上記の例では
私はoperator [] (K const &)
は、どうやらそれはそうではありません基本的にコメントアウト文
である、単にreturn emplace(k, mapped_type()).first->second
またはreturn insert(value_type(k, mapped_type())).first->second
であることを考えていました。 operator []
は内部でplacement new
の魔法を実行しますか?
また、ptr_deque
には特別なものがありますか?私はhttp://en.cppreference.com/w/cpp/container/unordered_map/operator_atによると、GCC-6.1 &ブースト1.59
とほぼ同等である;' – aschepler
ありがとう。これが返信であった場合は、私は投票して回答とします – zrb