我有一个关于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/

10-17 01:27