template<class T>
class Buffer
{

    unsigned int siz;
    T *data;


public:

    ///constructor(size,filename,openmode)
    Buffer(unsigned int s,const char* n, const char* m):siz(s)
    {
        data= new T[siz];
    }

    ///destructor
    ~Buffer()
    {
        delete[] data;
    }

    ///operator[]
    T& operator[](unsigned int i)
    {
        if(i>siz-1)
        {
            unsigned int newsize=siz*2;
            T* tmp=new T[newsize];
            for(unsigned int j = 0; j < siz; j++)
            {
                tmp[j] = data[j];
            }
            siz=newsize;
            delete[] data;
            data=tmp;
        }
        return data[i];
    }
};     

int main() {
    Buffer<char*> s(20,"s.txt","rw");    //20 long char*
    for(unsigned int i=0;i<24;i++){   //it overwrites the size of s after default 20
        s[i]="hey";
    }
}