И ваш конструктор и деструктор классакажутся прекрасными (вы динамически выделяете память с помощью new[]
в конструкторе, а delete[]
- в деструкторе).
Но я думаю, что у вас могут быть проблемы во время копий.
В самом деле, ваш класс имеет по умолчанию конструктора копирования и operator=
, но поведение по умолчанию не хорошо в этом случае; на самом деле, поведение по умолчанию - это просто копия по-членски, но копирование необработанного указателя tHanning
- элемент данных - «непроницаемость».
Либо отключить конструктор копирования и operator=
(например, объявив их private
в C++ 98/03, или с использованием нового синтаксиса = delete
C++ 11), или дать надлежащее выполнение для них.
Правильная реализация должна сделать deep копия принадлежащего массиву (с правильным удалением любого ранее выделенного массива).
Я думаю, что самое лучшее, что вы можете сделать, это использовать std::vector<double>
вместо необработанного указателя.
Если вы действительно такие весьма ограничены на (относительно небольшой) погона std::vector
, а затем рассмотреть вопрос об использовании смарт указатель как std::unique_ptr
:
#include <memory> // for std::unique_ptr
class estimate
{
private:
std::unique_ptr<double[]> tHanning; // <--- SMART pointer
public:
estimate()
: tHanning(new double[1000])
{
for (int m = 0; m < 1000; m++)
{
tHanning[m] = (0.5-0.5*cos(2.0*PI*(m+1)/(1001)));
}
}
// No need to define destructor - smart pointer automatically deletes its owned stuff
};
В этом случае класс будет движимое но не скопирован, и вы понесете почти нулевые служебные данные, если по сравнению с необработанным ящиком указателя.
как чтение Bouns, рассмотрим Rule of Three в C++.
Опять же, в вашем HBMain
классе, не использовать необработанный элемент данных estimate *objEstimate
указатель. Вместо этого используйте умные указатели как:
class HBMain
{
....
private:
std::unique_ptr<estimate> objEstimate;
// Again, no need to define a custom destructor for deleting objEstimate.
// std::unique_ptr will do proper deletion *automatically*.
};
Пожалуйста отправьте точное сообщение об ошибке. Кроме того, как вы создаете экземпляры «оценки»? – arne
Как вы используете класс 'оценка'? Вы можете прочитать о [правиле трех] (http://en.wikipedia.org/wiki/Rule_of_three_%28C%2B%2B_programming%29). –
Спасибо всем. Я отредактировал и поместил код, как я использую класс оценки. –