Как преобразовать шаблон T в указатель класса - PullRequest
0 голосов
/ 17 апреля 2020

Я пытаюсь реализовать шаблонный массив Array, который может содержать как указатели, так и примитивные типы данных. Но при вызове деструктора указатели в этом массиве не удаляются должным образом.

Поэтому я пытаюсь преобразовать каждый элемент в этом массиве в соответствующий класс и вызвать delete. Но я столкнулся с проблемой. Я не могу преобразовать тип T в мой указатель класса.

Я собираюсь удалить элементы из этого массива. Может кто-нибудь помочь в этом?

template <class T>
class LIBRARY_EXPORT MyArrayT
{
public:

    MyArrayT()
    {
        this->count = 0;
    }

    ~MyArrayT()
    {
        if ((this->count) > 0)
        {
            //std::cout << "Deleting Array values" << std::endl;
            delete[] this->values;
            //free(this->values);

            /*for (int i = 0; i < this->count; i++)
            {
                delete this->values[i];
            }*/

            this->count = 0;
        }
    }

    void SetValue(std::vector< T > items)
    {


        //Delete existing memory
        delete[] this->values;

        this->count = items.size();

        if (this->count > 0)
        {
            this->values = new T[this->count];

            for (int i = 0; i < count; i++)
            {
                this->values[i] = items[i];
            }
        }
    }

    void SetValue(T items, int index)
    {
        if (this->count > index)
        {
            this->values[index] = items;
        }
    }

    T GetValue(int index)
    {
        if (this->count > index)
        {
            return this->values[index];
        }
        return NULL;
    }

    T* GetValue()
    {
        return this->values;
    }

    _int64 GetCount()
    {
        return this->count;
    }

private:
    _int64  count;
    T* values;
};
class LIBRARY_EXPORT MyString
{
public:
    MyString();
    ~MyString();
    void SetValue(std::string str);
    std::string GetValue();
    _int64 GetCount();

private:
    _int64  count;
    char* value;
};
int main()
{
    MyArrayT<MyString*>* MyArrayValue = new MyArrayT<MyString*>() ;
    vector<MyString*> value9;
    MyString* opt1 = new MyString();
    opt1->SetValue("Option: 1");
    value9.push_back(opt1);
    MyArrayValue->SetValue(value9);

    MyArrayT<int>* MyArrayValueInt = new MyArrayT<int>() ;
    vector<int> value1;
    value1.push_back(1);
    value1.push_back(2);
    MyArrayValueInt->SetValue(value1);

    delete MyArrayValue;   //Calling this delete doesn't calling the ~MyString() destructor
    delete MyArrayValueInt;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...