Как отладить функцию уничтожения в Cpp программе - PullRequest
0 голосов
/ 24 октября 2019

Код

Я пытаюсь отладить приведенный ниже код:

#include <iostream>

class wine
{
public:
    //wines name/brand
    char *name;
    //wines age
    int age;
    //in liters
    long double volume;
    //def construct
    wine();
    //construct
    wine(char *name, int age, long double volume) : name(name), age(age), volume(volume) {};
    //destruckt
    ~wine();
};

wine::wine() {}
wine::~wine() 
{
    delete &name;
    delete &age;
    delete &volume;
}

int main()
{
    char a[5] = { 'G','a','l','l','o' };
    wine old(a, 50, 1);
    for(int i = 0; i < 5; i++)
    {
        std::cout << a[i];
    }
    while (!std::cin.ignore());
    delete &old;
    return 1;
}

Что я заметил во время отладки, так это то, что функция уничтожения является ошибкой, но я больше ничего не достиг

1 Ответ

2 голосов
/ 24 октября 2019

Вы не делаете динамического выделения памяти с new, поэтому вам также не нужно delete. Удалить delete &old;. Деструктор будет автоматически вызываться, когда old выходит из области видимости (что находится в конце вашей main функции).

хорошо, что я наблюдал, пока debugin был, что функция уничтоженияошибка

Это верно. Ваш класс wine не содержит ничего, что выделяется динамически, и, следовательно, ничего, что необходимо удалить с помощью delete. Тем не менее, ваш деструктор пытается удалить свои переменные-члены.

Удалите эти delete вызовы в деструкторе. Вы можете просто избавиться от деструктора в целом, если хотите (таким образом, wine остается с деструктором по умолчанию, который не делает ничего особенного).

...