-4

令人难以置信的是,标准库中没有任何内容允许存储不可复制构造的对象 - 我至少遇到过复制一直没有任何意义的情况(增强信号、opengl 对象等)但是在哪里另一方面,默认构造是一种明智的操作。出于某种原因,默认答案似乎是使用指针而不是对象。最终通过额外的间接和引用计数引入了无意义的开销(因为 unique_ptr 也是不可复制的),而且使用起来有些尴尬。

话虽如此,这样的选择是否存在?

4

1 回答 1

3

从 C++11 开始,大多数(如果不是全部)容器不要求它们的元素是可复制的。例如,vector 只要求元素是可移动的,而其他容器(deque、*list、*map、set)没有可复制/可移动的元素要求。您需要默认构造元素,或者使用 emplace方法来创建它们。当然,如果您调用需要复制/移动的操作,则您的类型必须支持它,但仅将元素存储在容器中并不要求它们是可复制的。

于 2013-02-25T21:36:41.190 回答