@BelDm

Не работает деструктор. В чем ошибка?

Простенький код создания объекта класса (полином к примеру). За конструктором следует деструктор очистки памяти, все по букварю. Код (приведен ниже) написан в Code::Blocks. В иных средах работает.

#include <bits/stdc++.h>

using namespace std;

class Polinomial
{
private:
    //Свойства класса
    int degree = 0;
    double *coefficient = NULL;

public:
    //Конструктор
    Polinomial (double *arr, int x)
    {
        degree = x - 1;
        coefficient = (double*)malloc(sizeof(double)*x);
        for (int i = 0; i < x; i++)
        {
            coefficient[i] = arr[i];
        }
    }

    //Деструктор
    ~Polinomial()
    {
        if (coefficient != NULL)
        {
            free (coefficient);
        }
    }

    friend ostream & operator << (ostream & out, Polinomial &p);
};

ostream & operator << (ostream & out, Polinomial &p)
{
    for (int i = 0; i <= p.degree; i++)
    {
        out << p.coefficient[i] << " ";
    }

    return out;
}

int main() {

    double arr1[] = {1.0, 3.0, 5.0};
    Polinomial pol1(arr1, 3);
    cout << pol1;


    return 0;
}


63dac7d9a50e5357416158.jpeg
  • Вопрос задан
  • 250 просмотров
Решения вопроса 1
jcmvbkbc
@jcmvbkbc
"I'm here to consult you" © Dogbert
Не работает деструктор

"Не работает деструктор" -- это когда программу компилируешь, запускаешь, а деструктор не делает того, что в нём написано. У тебя же программа не компилируется. Из-за того, что в настройках компилятора стоит "трактовать предупреждения как ошибки" и "предупреждать о неэффективном коде С++". Ну и вдобавок, предупреждение тебе правильно говорит, что если ты не реализовал конструктор копирования и оператор присваивания для класса самостоятельно управляющего памятью, то жди проблем, когда начнёшь копировать объекты этого класса.
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
@vanyamba-electronics
Если в деструкторе выполняется очистка памяти, то его следует объявлять виртуальным:
virtual ~Polynomial() { ... }
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы