如何在析构函数中删除?

How to delete in destructor?

本文关键字:删除 析构函数      更新时间:2023-10-16

我在析构函数中调用删除,但它说:unentifier "data"是未定义的!不应该删除析构函数中的工作吗?

struct Coada
{
Coada(int size_max=0)
{
int prim = -1;
int ultim = -1;
int *data = new int[size_max];
}
~Coada()
{
delete[] data;
}

};

若要删除指针,指针的值必须存储到删除点。由于指针data仅在构造函数返回之前存在,并且不会创建指针值的副本,因此在构造函数返回后无法删除指针。由于在此之前未将其删除,因此分配的内存将泄漏。

此外,不能在其范围之外访问变量。data是构造函数的局部变量,不能在该函数外部访问。析构函数中没有变量data;因此,编译器的错误。

因此,如果您确实在函数中分配了某些内容,并且不希望在该函数中释放它,则必须将指针存储在某个位置。由于分配的函数是构造函数,因此将指针存储在成员变量中是很自然的。析构函数可以访问成员变量,因此能够删除指针。

但是,请记住,C++程序员需要手动进行内存管理的情况极为罕见。应尽可能避免。例如,在这种情况下,使用std::vector来分配动态大小的数组是明智的。

这应该适用于您的对象使用类:

class Coada {
private:
int prim;
int ultim;
int *data;
public:
Coada(int size_max=0)
{
this->prim = -1;
this->ultim = -1;
this->data = new int[size_max];
}
~Coada()
{
delete[] this->data;
}
};
int main(void)
{
Coada my_coada(4);
return 0;
}

其他人说的一切都是正确的,你应该遵循它。
回答您的问题。是的,如果您做得对,删除应该在析构函数中工作。下面是它如何工作的示例:

struct Coada{
Coada(int size_max=0){
int prim = -1;
int ultim = -1;
data = new int[size_max];
}
~Coada(){
delete[] data;
}
private:
int* data;
};

您可以看到我将data声明为结构体 Coada 的成员变量,因此我可以在此结构中的任何地方访问它,也可以在析构函数中访问它。

但是所有这些都你将在一本好的 c++ 书中学到。

享受阅读:)