【发布时间】:2017-02-07 19:26:50
【问题描述】:
我需要一个既不能复制也不能移动的元素容器。这些元素不是默认可构造的,但它们的构造函数得到相同的参数。
容器的大小在其生命周期内不会改变。它应该像内置数组一样简单,但它的大小是在运行时调用构造函数时确定的。
有没有一种简单的方法来实现它,而无需使用std::vector<std::unique_ptr<T>> 产生的内存分配和间接开销?
【问题讨论】:
-
你试过emplace函数吗?不过,我不确定它们与不可移动的效果如何。
-
您需要一个基于内存分配和放置的解决方案-
newing 元素。 -
@Hayt
std::vector<T>不能与不可复制和不可移动的T一起编译。emplace()ing 元素需要向量增长(可能)。增长操作要求元素可以被复制或移动。 -
deque和list在使用emplace_back时都只需要T是EmplaceConstructible。也许检查一下 boost——它没有一个容器来限制它可以拥有的元素数量吗?set::emplace在 cppreference 上没有列出对T的要求... -
@RalphTandetzky 啊忘记了。你就在那儿。
标签: c++ arrays containers noncopyable