我正在寻找一个介于 boost::array、boost::scoped_array 和 std::vector 之间的 C++ 容器。
我想要一个通过 new[] 动态分配的数组(无自定义分配器),包含在具有有意义的复制构造函数的类型中。
boost::array 是固定大小的,虽然我不需要调整任何东西的大小,但我不知道编译时数组的大小。
boost::scoped_array 没有复制构造函数,这意味着我需要使用 std::copy(我之前的复制粘贴密集型解决方案)手动向每个类添加一个复制构造函数。这也很容易出错,因为您最好确保在添加字段时将正确的初始值设定项添加到自定义复制构造函数;即大量样板文件。
std::vector 使用一些预分配系统,因此不使用 operator new[]。这是有问题的,因为它需要自定义分配器,更糟糕的是,这还不够,因为有一些奇怪的极端情况(我不完全理解),其中涉及按值返回语义导致问题;我不希望容器做任何花哨的事情,而只是包含一个 new[]'d 数组并将其复制到它的复制构造函数中 - 最好重载所有常见的可疑对象以用作集合。
我不需要调整任何东西的大小,但大小必须在运行时是可控的。基本上,恰好具有健全的复制构造函数(例如通过 std::copy)的 scoped_array 变体就可以了。有这样的标准集合吗?
基本上,我正在寻找具有值语义的沼泽标准动态分配数组。
最佳答案
从std::vector
私有(private)继承,然后适当调整。例如删除 resize()
,并可能添加 setsize()
和一个 bool
标志以确定是否已设置大小。
您的复制构造函数可以调用 std::vector
复制构造函数,并自动设置标志以防止进一步更改。
关于具有值语义且没有分配器恶作剧的 C++ 数组?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1680880/