Предположим, у меня есть класс C ++ с двумя закрытыми переменными.Массив фиксированного размера data
и указатель на этот массив pnt
.
class MyClass
{
private:
double *pnt;
double data[2];
public:
myClass();
virtual ~MyClass();
double* getPnt() const;
void setPnt(double* input);
};
MyClass::MyClass()
{
double * input;
data[0] = 1;
data[1] = 2;
input= data;
setPnt(input);
}
MyClass::~MyClass()
{
delete this->pnt; // This throws a runtime error
}
void MyClass::setPnt(double * input)
{
pnt = input;
}
double * MyClass::getPnt() const;
{
return pnt;
}
int main()
{
MyClass spam; // Construct object
delete spam; // Error C2440: 'delete' cannot convert from 'MyClass' to 'void*'
}
С этим кодом связаны две проблемы.Во-первых, если я пытаюсь вызвать delete для объекта, я получаю:
Ошибка C2440: «delete» не может преобразовать из «MyClass» в «void *»
Во-вторых, если я закомментирую оператор удаления, я получу ошибку в реальном времени о том, что утверждение отладки не удалось!и это:
Expression: _BLOCK_TYPE_IS_VALID(pHead->nBlockUse)
Мой вопрос: Для класса с указателем на частный массив фиксированного размера, как правильно освободить память, написать / вызвать деструктор?
PS Я не могу использовать vector
или подобные контейнеры (отсюда и этот вопрос).