如何在析构函数中删除?
How to delete in destructor?
我在析构函数中调用删除,但它说: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++ 书中学到。
享受阅读:)
相关文章:
- MSVC 编译器/链接器何时合成标量/矢量删除析构函数
- 如果引用应该保留,不删除析构函数中的指针会导致内存泄漏吗?
- 删除析构函数C++中的指针
- bad_alloc::'标量删除析构函数'(无符号整数)当我尝试创建矢量 470MB 大小时
- 这是删除析构函数中的数组的正确方法吗?
- 尽管使用了 boost::scoped_ptr,我们是否应该删除析构函数中成员的指针
- 调用remove()删除析构函数中的文件是否安全
- 当存储在std::vector属性中时,我可以删除析构函数中的指针吗
- 删除析构函数中的(这个)指针
- C++ 删除析构函数中的向量类成员内存
- 删除析构函数中的指针和映射
- 尝试删除析构函数中已删除的指针
- 为什么允许我声明一个带有已删除析构函数的对象
- 为什么在删除析构函数时调用析构函数,如果未删除则不调用析构函数?
- 删除析构函数的意义何在
- std::istream子类:删除析构函数中的streambuf
- 如何安全地删除析构函数中的线程指针
- 标量删除析构函数问题
- C++11:我可以创建一个类型具有已删除析构函数的字段吗
- 为什么在 VC 中,'delete' 和 'delete []' 都使用标量删除析构函数?