指针内存分配和删除

时间:2019-04-28 14:31:56

标签: c++ qt pointers memory

关于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被删除了)还是什么都不做,因为我的析构函数为空?

1 个答案:

答案 0 :(得分:1)

如果我们谈论的是QTableWidget::setItem,请注意文档状态“表格获取项目的所有权”。这意味着表对象负责在不再需要该项目时对其进行销毁。


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

相关问题