如何手动销毁成员变量

How to manually destroy member variables?

本文关键字:成员 变量 何手动      更新时间:2023-10-16

我有一个关于析构函数的基本问题。

假设我有以下类

class A
{
public:
int z;
int* ptr;
A(){z=5 ; ptr = new int[3]; } ;
~A() {delete[] ptr;};
}

现在,析构函数应该销毁对象的实例化。上面的析构函数正是这样做的,释放了new分配的动态分配内存。

但是变量z呢?我应该如何手动销毁它/释放z分配的内存?当类超出范围时,它会自动销毁吗?

它会自动"销毁",尽管在您的示例中int z是POD类型,因此没有显式的析构函数。。。存储器被简单地回收。否则,如果对象有一个析构函数,那么在主类A的析构函数主体完成但未退出后,将调用它来正确清理该非静态数据成员的资源。

z自动销毁。每一个"自动"变量都会发生这种情况。即使是像int*float*some_class*等指针。然而,当原始指针被破坏时,它们也不会自动成为deleted。这就是智能指针的行为方式。

由于该属性,应该始终使用智能指针来表达所有权语义。它们也不需要在复制/移动构造函数/赋值运算符中特别提及,大多数时候,当使用智能指针时,您甚至不需要编写它们,因为它们自己可以完成所有需要的操作。

销毁一个对象也会销毁该对象的所有成员变量。您只需要删除指针,因为销毁指针不会有任何作用——特别是它不会销毁指针指向的对象或释放其内存。

事实上,当类超出范围时,它会自动销毁。猜测是否是这种情况的一个很好的方法是在声明之后没有*

对于像int、float等PODS(普通的旧数据类型),它们会自动销毁。如果有对象作为数据成员(例如std::string aStr;),则会自动调用它们的析构函数。您只需要手动处理内存释放(如上所述)或任何其他手动对象或数据清理(如关闭文件、释放资源等)。