指针内存分配和删除 我有一个简单的关于C++中指针管理的问题。 当我执行以下操作时: myTableWidget->setItem(j, i, new TableWidgetItem("something"));

指针内存分配和删除 我有一个简单的关于C++中指针管理的问题。 当我执行以下操作时: myTableWidget->setItem(j, i, new TableWidgetItem("something"));,c++,qt,pointers,memory,C++,Qt,Pointers,Memory,如果我理解得很好,我将创建一个指向tablewidgetitem的新指针。 但是,由于我没有定义任何名称,因此无法执行删除操作。 所以,在我的程序运行时,它会一直保存在内存中,对吗?还是我不明白 另一件事如下。 假设我有一个类,它接受2个double,例如ComplexNumber类。我们班的解构师是空的。但是,如果我对ComplexNumber类的一个元素调用delete,它是要删除内存中的这个元素,还是只调用空的析构函数?如果该元素在所有运行时间都保留在内存中,当我要更改表的值时,如何正确编

如果我理解得很好,我将创建一个指向tablewidgetitem的新指针。 但是,由于我没有定义任何名称,因此无法执行删除操作。 所以,在我的程序运行时,它会一直保存在内存中,对吗?还是我不明白

另一件事如下。 假设我有一个类,它接受2个double,例如ComplexNumber类。我们班的解构师是空的。但是,如果我对ComplexNumber类的一个元素调用delete,它是要删除内存中的这个元素,还是只调用空的析构函数?如果该元素在所有运行时间都保留在内存中,当我要更改表的值时,如何正确编程以删除它? 示例如下:

复合物

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被删除,或者它什么也不做,因为我的析构函数是空的?

如果我们谈论的是,请观察该表拥有该项的文档状态。这意味着当不再需要该项时,表对象负责销毁该项


删除表达式有两个作用。首先,它运行操作数指向的对象的析构函数。然后,它释放操作数指向的内存。在您的示例中,分配的内存确实已释放。

我用一个简单的示例更新了我的问题。感谢您对QTableWidget的回答。这是否意味着当我附加一个项目时,前一个项目会在内存中被删除?我猜附加费的意思是替换。是的,我希望setItem在设置新项目时销毁上一个项目。为了说服你自己,做一个实验——让TableWidgetItem的析构函数打印或记录一些东西,这样你就可以观察它在何时何地被调用。非常感谢你回答我的简单问题。我现在更好地理解了delete表达式背后发生的事情:我正在创建一个指向tablewidgetitem的新指针-不,代码创建了一个新的tablewidgetitem对象;新运算符的结果是指向该对象的指针。不要混淆对象和指针;它们是两种不同的东西。指针通常指向对象。