关于C ++中的指针管理,我有一个简单的问题。 当我执行以下操作时:
myTableWidget->setItem(j, i, new TableWidgetItem("something"));
如果我理解得很好,我正在创建一个指向tablewidgetitem的新指针。
但是,由于我没有定义任何名称,因此无法执行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被删除了)还是什么都不做,因为我的析构函数为空?
答案 0 :(得分:1)
如果我们谈论的是QTableWidget::setItem
,请注意文档状态“表格获取项目的所有权”。这意味着表对象负责在不再需要该项目时对其进行销毁。
delete
表达式有两件事。首先,它运行由其操作数指向的对象的析构函数。然后,它释放其操作数指向的内存。在您的示例中,分配的内存确实已释放。