這是一個頗爲學術化的問題,我認識到它在優化方面沒有什麼問題,但它只是出於興趣。矢量是否必須存儲兩次大小?
從我的理解,當你調用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