【发布时间】:2018-11-24 03:04:45
【问题描述】:
在我们的项目代码中,不应复制资源类型。
struct Res {
....
Res(const Res& rhs) = delete;
Res& operator=(const Res&) = delete;
Res(Res&&) = delete;
Res& operator=(Res&&) = delete;
};
但是,std 容器似乎都需要复制构造函数。那么如何将 Res 存储在 std::vector 中?
class ResourceCache{
....
const Res& GetRes(size_t index);
std::vector<Res> resources_;
}
【问题讨论】:
-
你刚刚回答了你自己的问题:你不能。但是,例如,您可以在向量中存储
std::shared_ptr或std::unique_ptr。如果您的类的所有实例都是在动态范围内创建的,那么您一定已经在使用智能指针,对吧?如果是这样,也只需将它们存储在向量中。问题解决了。 -
物体可以移动吗?
-
正如问题中明确显示的那样,对象也不能移动,所以这不是该问题的欺骗,但是,无论如何......
-
emplace_back 会直接在容器中构造对象。
-
@MichaelSurette:这将需要
vector到reserve空间一次,但永远不会再次调整大小;否则,容量变化将迫使将元素从旧存储移动到新存储,这将失败。 C++11 及更高版本在理论上通常允许vectors 使用它,但提到大多数方法都有更严格的要求。
标签: c++ copy-constructor