【发布时间】:2019-09-17 08:45:46
【问题描述】:
我有一个关于 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():
{
}
main.cpp
int main(int argc, char *argv[])
{
Complex *a = new Complex a(2,3);
delete a;
}
在这种情况下,我的内存是否没有 a(a 在我的内存中被销毁,双 2 和 3 被删除)或者它什么也不做,因为我的析构函数是空的?
【问题讨论】:
-
回复:“我正在创建一个指向 tablewidgetitem 的新指针”——不,代码创建了一个新的
TableWidgetItemobject;new运算符的结果是指向该对象的指针。不要混淆对象和指针;他们是两个不同的东西。指针通常指向对象。