问题std::array
在于它具有固定的编译时大小。我想要一个可以使用动态大小创建的容器,但该大小在容器的整个生命周期内保持固定(因此std::vector
不起作用,因为push_back
会将大小增加 1)。
我想知道如何实现这一点。我尝试编写一个包含内部std::vector
存储的类,并且只公开std::vector
不改变大小的成员。我的问题是关于复制/移动赋值运算符以及swap
成员函数。通常,移动赋值声明为noexcept
. 但是,在分配之前,我必须检查 thelhs
和 therhs
的大小是否相同。如果不是,我必须抛出一个异常,因为否则,分配rhs
给lhs
会改变 的大小lhs
,这是我不想要的。也是swap
如此,在我的实现中也是noexcept
出于同样的原因。
我知道我违背了通常的建议来制作swap
和移动作业noexcept
(Scott Meyers 的 Modern Effective C++ 的第 14 项),所以我想知道这是否是好的设计?还是有更好的方法来实现固定运行时大小的容器?
示例:假设我已经使用名称定义了我的固定大小容器FixedSizeArray<T>
。
auto arr1 = FixedSizeArray<double>(4, 1.0)
最后一行代码定义了一个FixedSizeArray
包含大小为 4 的双精度数。现在定义另一个:
auto arr2 = FixedSizeArray<double>(10, 1.0)
应为以下行:
arr1 = std::move(arr2)
扔?关于什么:
arr1.swap(arr2)