【发布时间】:2014-11-30 19:55:02
【问题描述】:
是否可以初始化不可复制对象的向量向量?
class obj : private boost::noncopyable {
// ...
};
vector<vector<obj> > v(10); // OK
for(int i = 0; i < v.size(); ++i)
v[i].resize(10); // ERROR
还有
vector<vector<obj> > v(10, vector<obj>(10)); // ERROR
我了解为什么上面的代码无法编译。我要问的是是否有解决方法。看来如果std::vector 有一个像resize_from_zero 这样不需要复制构造函数的成员函数,那么这将是可行的。
(我的问题是关于 C++03,如果这有所作为)
【问题讨论】:
-
是的,它有所不同——C++11 中有移动语义和
emplace_back。 -
是的,这在 C++11 中是可能的 - 如果类型不是默认可构造且不可移动,您的代码将无法工作。
-
如果你使用原始类型而不是 obj。你的代码可以工作。但根据你的问题。你不能做你想做的事。你要么选择 c++11,要么做一些 puch_bcck s。
-
@BufBills 你是说 push_back 的?那些需要复制构造函数。
-
需要明确的是,涵盖不可复制不可移动对象的 C++11 方法是否可以接受,或者您真的需要 C++03 方法吗? (我仍然认为它不适用于
vector,但不同的容器类型可能会起作用。)
标签: c++ stdvector c++03 noncopyable