Что мне нужно в моем классе при использовании связанных списков и динамических массивов? - PullRequest
0 голосов
/ 29 ноября 2018

При создании шаблонного класса, включающего динамический массив, я всегда писал специальный конструктор копирования, перегруженный оператор присваивания и деструктор.Я сделал то же самое при создании класса шаблона со связанным списком.Сейчас я делаю шаблонный класс, который использует динамический массив и связанный список.Теперь мне нужно сделать 2 конструктора копирования, 2 перегруженных оператора присваивания и 2 деструктора?Или я могу сделать по одному для каждого случая?На данный момент у меня есть только 1 из каждого, и я не получаю никаких ошибок.Я просто хочу быть уверен, что это не вызовет проблем в будущем.

Конструктор копирования

template<class T>
Board<T>::Board(const Board<T> &otherBoard) {

    //for copying linked list..do I need??
    //start empty
    firstP = NULL;
    //copy list from other list
    append(otherBoard);

    //allocate 1st and copy 1st
    grid = new T*[BOARDSIZE];
    for (int i = 0; i < BOARDSIZE; i++)
        grid[i] = new T[BOARDSIZE];

    //allocate 2nd and copy 2nd
    for (int i = 0; i < BOARDSIZE; i++)
        for (int j = 0; j < BOARDSIZE; j++)
            grid[i][j] = otherBoard.grid[i][j];
}

Оператор присваивания

//Assignment 
template<class T>
Board<T> &Board<T>::operator=(const Board<T> &otherBoard) {

    //check for self-assignment
    if (this != &otherBoard) {

        //for assigning linked list...do i need?
        //Remove all current nodes and reset the pointer
        clear();

        //copy from other board
        append(otherBoard);

        //deallocate old array
        for (int i = 0; i < BOARDSIZE; i++)
            delete[] grid[i];
        delete grid;

        //allocate and copy
        for (int i = 0; i < BOARDSIZE; i++)
            grid[i] = new T[BOARDSIZE];

        for (int i = 0; i < BOARDSIZE; i++)
            for (int j = 0; j < BOARDSIZE; j++)
                grid[i][j] = otherBoard.grid[i][j];

    }
    //return self
    return *this;
}

Деструктор

template<class T>
Board<T>::~Board() {

    //for linked list...do i need?
    clear();

    //deallocate
    for (int i = 0; i < BOARDSIZE; i++)
        delete[] grid[i];
    delete[] grid;
}
...