我有一个类test
,由于某些原因,它不是标准的可构造的,也不是可分配的。然而,它是可复制的 - 可能会说它的行为有点像参考。
不幸的是,我需要这些元素的动态数组,并意识到vector<test>
不是正确的选择,因为向量的元素必须是标准的可构造和可分配的。幸运的是我通过
vector<T>::reserve
和vector<T>::push_back
代替vector<T>::resize
并直接填写条目(无标准构造)用于赋值的copy'nwap技巧以及vector
通常使用Pimpl-idiom(不直接赋值现有test
元素)实现的事实,即< / p>
class base {
private:
std::vector<test> vect;
/* ... */
public:
/* ... */
base& operator= (base y) {
swap(y);
return *this;
}
void swap(base& y) {
using std::swap;
swap(vect, y.vect);
}
/* ... */
};
现在我假设我可能没有考虑过每一点点,而且最重要的是这些技巧都是强烈依赖于实现的。该标准仅保证标准可构造和可分配类型的标准行为。
现在下一步是什么?如何获得动态数组的test
个对象?
备注:我必须更喜欢标准C ++提供的内置解决方案和类。
编辑:我刚才意识到我的伎俩实际上没有用。如果我定义一个真正的*非可赋值类,我的编译器会出现大量错误。所以问题浓缩到最后一个问题:我如何拥有这些test
对象的动态数组?
(*)我的test
类提供了一个赋值运算符,但是这个运算符类似于对引用的赋值。
答案 0 :(得分:3)
考虑使用Boost的ptr_vector,它是Boost指针容器库的一部分。请参阅该库motivation中的优势#3。
答案 1 :(得分:0)
编写自己的动态数组类。听起来比试图使STL与那种奇怪的类型一起工作更少的工作。
答案 2 :(得分:0)
您可能希望查看Boost.Intrusive - 尽管这意味着您需要更改test
的类型以及内存中放置test
实例的位置。
答案 3 :(得分:0)
如何使用指针向量?