#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,升压:: ptr_deque < T >>的操作符[](K常量&)和布设
我在想,operator [] (K const &)
简直是return emplace(k, mapped_type()).first->second
或return insert(value_type(k, mapped_type())).first->second
,这在本质上是注释语句
显然事实并非如此。 operator []
在内部执行一些placement new
魔法吗?
或者有什么特别的关于ptr_deque
?
我使用GCC-6.1 &升压1.59
尝试也'testum.emplace(STD :: piecewise_construct,性病:: make_tuple(1U)的std :: make_tuple());' – aschepler
谢谢。如果这是一个答复,我会投票并标记为答案 – zrb