这是一个颇为学术化的问题,我认识到它在优化方面没有什么问题,但它只是出于兴趣。矢量是否必须存储两次大小?
从我的理解,当你调用new[size]
,额外的空间分配给存储分配的数组的大小。这是如此当调用delete []
时,知道可以释放多少空间。
我做了什么是写我是怎么想的一个载体将大致实现:
#include <cstddef>
template <class T>
class Vector
{
public:
struct VectorStorage
{
std::size_t size;
T data[];
};
Vector(std::size_t size) : storage(new VectorStorage[size])
{
storage->size = size;
}
std::size_t size()
{
return storage->size;
}
~Vector()
{
delete[] storage;
}
private:
VectorStorage* storage;
};
据我所知,size
存储两次。一旦在VectorStorage
对象直接(因为它需要这样size()
函数可以工作),但再次以编译器隐藏的方式,所以delete[]
可以工作。
好像size
存储两次。这种情况是不可避免的,还是有办法确保大小只存储一次?
你公然无视[三规则(http://stackoverflow.com/q/4172722/46642)。 –
如在,赋值运算符?这只是一个例子,不是矢量的完整实现。 – Clinton