如何在析构函数中删除?
How to delete in destructor?
我在析构函数中调用了 delete,但它说:undentifier "data" 未定义!不应该删除析构函数中的工作吗?
struct Coada
{
Coada(int size_max=0)
{
int prim = -1;
int ultim = -1;
int *data = new int[size_max];
}
~Coada()
{
delete[] data;
}
};
要删除指针,指针的值必须存储到删除点。由于指针data
只存在于构造函数returns之前,并且没有对指针值进行复制,因此在构造函数returns之后指针不能被删除。由于在此之前没有删除,分配的内存将泄漏。
此外,不能在其范围之外访问变量。 data
是构造函数的局部变量,不能在该函数之外访问。析构函数中没有变量data
;因此你的编译器出错了。
因此,如果您确实在函数中分配了某些内容,并且不希望在该函数中取消分配它,则必须将指针存储在某个地方。由于您分配的函数是构造函数,因此将指针存储在成员变量中是很自然的。析构函数可以访问成员变量,因此可以删除指针。
但是,请记住,C++ 程序员极少需要进行手动内存管理。应尽可能避免。例如,在这种情况下,使用 std::vector
分配一个动态大小的数组会很聪明。
别人说的都是对的,你要照做。
回答你的问题。是的,如果你做对了,删除应该在析构函数中工作。这是一个如何工作的例子:
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
声明为 struct Coada 的成员变量,这样我就可以在这个结构的任何地方访问它,也可以在析构函数中访问它。
但是您将在一本优秀的 C++ 书中学到所有这些。
阅读愉快:)
这应该可以为您的对象使用 class :
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;
}
我在析构函数中调用了 delete,但它说:undentifier "data" 未定义!不应该删除析构函数中的工作吗?
struct Coada
{
Coada(int size_max=0)
{
int prim = -1;
int ultim = -1;
int *data = new int[size_max];
}
~Coada()
{
delete[] data;
}
};
要删除指针,指针的值必须存储到删除点。由于指针data
只存在于构造函数returns之前,并且没有对指针值进行复制,因此在构造函数returns之后指针不能被删除。由于在此之前没有删除,分配的内存将泄漏。
此外,不能在其范围之外访问变量。 data
是构造函数的局部变量,不能在该函数之外访问。析构函数中没有变量data
;因此你的编译器出错了。
因此,如果您确实在函数中分配了某些内容,并且不希望在该函数中取消分配它,则必须将指针存储在某个地方。由于您分配的函数是构造函数,因此将指针存储在成员变量中是很自然的。析构函数可以访问成员变量,因此可以删除指针。
但是,请记住,C++ 程序员极少需要进行手动内存管理。应尽可能避免。例如,在这种情况下,使用 std::vector
分配一个动态大小的数组会很聪明。
别人说的都是对的,你要照做。
回答你的问题。是的,如果你做对了,删除应该在析构函数中工作。这是一个如何工作的例子:
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
声明为 struct Coada 的成员变量,这样我就可以在这个结构的任何地方访问它,也可以在析构函数中访问它。
但是您将在一本优秀的 C++ 书中学到所有这些。
阅读愉快:)
这应该可以为您的对象使用 class :
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;
}