我有一个关于C ++中指针管理的简单问题。
当我执行以下操作时:
myTableWidget->setItem(j, i, new TableWidgetItem("something"));
如果我理解得很好,那么我将创建一个指向tablewidgetitem的新指针。
但是,由于我没有定义任何名称,因此无法执行
delete
操作。因此,这将始终在我的程序运行时保留在内存中,对吗?还是我不理解的东西?
另一件事是以下内容。
假设我有一个需要2个
doubles
的类(例如ComplexNumber
类)。我班的讲解员是空的。但是,如果我在类delete
的元素上调用ComplexNumber
,它将删除内存中的该元素还是只调用为空的析构函数?如果此元素在所有运行时间都保留在内存中,那么当我想更改表的值时如何正确编程以将其删除?下面的例子:
复杂度
class Complex
{
public:
double r;
double i;
Complex(double, double);
~Complex();
};
复杂文件
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被删除了)还是什么都不做,因为我的析构函数为空?
最佳答案
如果我们在谈论QTableWidget::setItem
,那么请注意文档状态“表获取项目的所有权”。这意味着表对象负责在不再需要该项目时将其销毁。delete
表达式有两件事。首先,它运行由其操作数指向的对象的析构函数。然后,它释放其操作数指向的内存。在您的示例中,分配的内存确实已释放。
关于c++ - 指针内存分配和删除,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/55891282/