c++Arrayクラスのステップパッケージ
*refcntもT*dataもポインタタイプなので、classで構造体にカプセル化!
template <class T>
class Array
{
private:
struct DataPack// !
{
T* data;
int size;
int refcnt;
};
DataPack* ptr;// new
public:
Array (int sz = 50)
{
assert(sz >= 0)
ptr = new DataPack;
ptr->size = sz;
ptr->data = new T[sz];
ptr->refcnt = 1;
}
Array(const Array<T>& a)
{
ptr = a.ptr;
(ptr->refcnt)++;
}
~Array(void)
{
(ptr->refcnt)--;
if((ptr->refcnt)==0)
{
delete[] (ptr->data);
delete ptr;
}
}
// 、getsize !
void Resize(int se)// !
{
assert(sz >= 0)
if(sz == ptr->size)
return;
T *newData = new T[sz];
int n = (sz < ptr->size) ? sz:ptr->size;
for(inti = 0; i < n; i++)
{
newData[i] = ptr->data[i];//copy newData
}
delete[] (ptr->data);
ptr->data = newData;
ptr->size = sz;
}
}