是否可以初始化不可复制对象的向量向量?

时间:2014-11-30 19:55:02

标签: c++ stdvector c++03 noncopyable

是否可以初始化不可复制对象的向量向量?

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,如果这有所不同)

1 个答案:

答案 0 :(得分:1)

这是不可能的; C ++ 03要求vector的元素是CopyConstructible和Assignable。

Rreference:C ++ 03 [lib.containers.requirements] / 3

  

存储在这些组件中的对象类型必须符合CopyConstructible的要求   类型(20.1.3),以及Assignable类型的附加要求。

其中“这些组件”表示dequelistqueuestackvectormapsetbitset

(可能有或没有某种方法让它看起来适用于特定的编译器,但这超出了标准C ++的范围。)