我正在为没有STL版本但是有模板支持的平台编写
我正在开发自己的std :: vector实现。
template<typename T> class Array
{
private:
T * buffer;
int count;
int capacity;
public:
Array() : buffer(0), count(0), capacit(0) { }
~Array() { if(buffer) delete[] buffer; }
void IN_ANY Reserve(const int capacity)
{
if(capacity >= count)
{
T * newBuff = new T[capacity];
if(capacity > count)
memset(newBuff+count, 0, (capacity-count) * sizeof(T));
memcpy(newBuff, buffer, count * sizeof(T));
if(buffer)
delete [] buffer;
buffer = newBuff;
this->capacity = capacity;
}
}
// Other methods...
}
当T具有非trival构造函数,非trival销毁和重载operator =时,问题就出现了。然后,当为数组保留额外的内存时,将调用T的析构函数,而不是构造函数。但不是复制构造函数(因为我使用了memcpy)。我怎样才能改进Reserve方法?
答案 0 :(得分:2)
不要自己滚动 - 使用STLPort。 http://sourceforge.net/projects/stlport/
这是一个免费且高度可移植的STL实现。
答案 1 :(得分:1)
如果您真的想知道如何实施STL的大部分内容,请参阅P.J. Plauger,Alexander Stepanov,Meng Lee和David R. Musser的“The C ++ Standard Template Library”一书。
除了使用和一些标准解释之外,还讨论了如何实现STL的大部分。这是一本相当古老的书,但对于了解幕后发生的事情非常有趣。
如果你不想知道如何做到这一点,但更多的只是想要它完成,那么请查看关于源伪造项目的其他答案之一。
答案 2 :(得分:-1)
我正在寻找的答案是安置新的