C++类的撤销操作是在析构函数的函数体之后吗

C++语言 码拜 3年前 (2017-04-14) 388次浏览
在C++Primer上看到析构函数函数体本身并不直接销毁类的成员,成员销毁的操作是在函数体之后的析构阶段执行的。
哪位大虾能帮忙解释一下是什么意思?
如定义一下arrarList类

class arrayList
{
public:
   ~arrayList() {}
    ......
}

这里的析构函数的函数体内没有任何东西,CPU还是会销毁类的基本数据类型成员,也就是说析构函数函数体只是类的设计者用来销毁动态分配的内存的吗?那假如类的成员没有动态内存的分配是不是就没有写析构函数的必要了呢?

解决方案

20

构造和析构,说到底假如涉及的类需要去初始化,需要释放资源,等等需要做的事情,那么才是必须的。关键是看看要做什么工作,假如也本人写了析构函数,但是需要释放的资源仍然没有释放,那么写了何益?
所以,要看本人应该做的工作能否都完成了,这才是关键。
有析构函数,代码会比较清晰。省略没什么好处,除了无用的省掉几行代码…

5

析构函数既便你不写,编译器也会默认给你加上一个默认的,可见,构造、析构、赋值,是一个类的骨干。
楼上的说得对,要关注于你本人的工作,有需要清理的工作,就在析构当中写了,而这个析构,加上那几句,不会有什么影响,反而使代码清晰。

15

在C++Primer上看到析构函数函数体本身并不直接销毁类的成员,成员销毁的操作是在函数体之后的析构阶段执行的
这句话是说释放本类的内存空间的时机。

arrayList *pArr = new arrayList;
pArr -> ~arrayList();                   //主动调用析构,调用合法,但不会释放类申请的内存
delete pArr;                                 //调用析构,并释放类申请的内存

10

引用:
Quote: 引用:

在C++Primer上看到析构函数函数体本身并不直接销毁类的成员,成员销毁的操作是在函数体之后的析构阶段执行的
这句话是说释放本类的内存空间的时机。

arrayList *pArr = new arrayList;
pArr -> ~arrayList();                   //主动调用析构,调用合法,但不会释放类申请的内存
delete pArr;                                 //调用析构,并释放类申请的内存

也就是说pArr->~arrayList();只是执行析构函数体里的语句,内置类型的一些变量没法释放吗。要释放内置类型的变量需要用delete pArr;?

对头,不管是构造函数,还是析构函数,就只是普通的函数。
用户可以根据需要判断能否主动调用。
但c++的真正的堆内存销毁,必须是delete关键字。


CodeBye 版权所有丨如未注明 , 均为原创丨本网站采用BY-NC-SA协议进行授权 , 转载请注明C++类的撤销操作是在析构函数的函数体之后吗
喜欢 (0)
[1034331897@qq.com]
分享 (0)