【发布时间】:2011-09-30 01:43:40
【问题描述】:
这是一个相当学术的问题,我意识到它对优化无关紧要,但这只是出于兴趣。
据我了解,当您调用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 被存储了两次。是这种情况且不可避免,还是有办法确保大小只存储一次?
【问题讨论】:
-
你公然无视rule of three。
-
如赋值运算符?这只是一个示例,不是矢量的完整实现。
标签: c++ optimization memory-management vector new-operator