gpt4 book ai didi

c++ - 指针内存分配和删除

转载 作者:行者123 更新时间:2023-11-28 04:19:02 24 4
gpt4 key购买 nike

我有一个关于 C++ 指针管理的简单问题。当我执行以下操作时:

myTableWidget->setItem(j, i, new TableWidgetItem("something"));

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

另一件事如下。假设我有一个需要 2 个 doubles 的类(例如 ComplexNumber 类)。我类的析构函数是空的。但是,如果我在我的类 ComplexNumber 的一个元素上调用 delete,它会在我的内存中删除这个元素还是只调用空的析构函数?如果这个元素在整个运行时间都保留在内存中,当我想更改表的值时,我如何正确编程以删除它?示例如下:

复杂.h

class Complex
{
public:
double r;
double i;

Complex(double, double);
~Complex();

};

复杂.cpp

Complex::Complex(const double& real, const double& imaginary): r(real), i(imaginary)
{

}
Complex::~Complex():
{

}

主要.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/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com