У меня простой вопрос относительно управления указателями в C ++.
Когда я делаю следующее:
myTableWidget->setItem(j, i, new TableWidgetItem("something"));
Если я правильно понимаю, я создаю новый указатель на элемент таблицы.
Однако, поскольку я не определил ни одного имени, я не могу выполнить операцию delete
.
Итак, это останется в памяти все время, пока работает моя программа, верно? Или я чего-то не понимаю?
Другое дело следующее.
Предположим, у меня есть класс, который занимает 2 doubles
(например, ComplexNumber
класс). Деструктор моего класса пуст. Однако, если я вызову delete
для элемента моего класса ComplexNumber
, он собирается удалить этот элемент из моей памяти или просто вызвать деструктор, который пуст? Если этот элемент остается в памяти все время выполнения, как я могу правильно запрограммировать его для удаления, когда я хочу изменить значения моей таблицы?
Пример ниже:
complex.h
class Complex
{
public:
double r;
double i;
Complex(double, double);
~Complex();
};
complex.cpp
Complex::Complex(const double& real, const double& imaginary): r(real), i(imaginary)
{
}
Complex::~Complex():
{
}
main.cpp
int main(int argc, char *argv[])
{
Complex *a = new Complex a(2,3);
delete a;
}
В этом случае моя память свободна от a (a уничтожена в моей памяти, а двойные 2 и 3 удалены) или она просто ничего не делает, так как мой деструктор пуст?