vector中clear和析构函数的功能确实类似,不同的是,clear 不会释放掉已配置的空间,dtor 会析构并释放。调用clear再析构不会有问题,调用两次析构也不会有问题。clear 不是简单的设置 size 为0,dtor 也不是简单的设置 capacity 为0。
vector中clear和析构函数的功能确实类似,不同的是,clear 不会释放掉已配置的空间,dtor 会析构并释放。调用clear再析构不会有问题,调用两次析构也不会有问题。
clear 不是简单的设置 size 为0,dtor 也不是简单的设置 capacity 为0。
它们涉及到元素的析构与对象分配,实际影响的是vector内部存储了元素起始、结束以及可用空间的尾部的指针。
clear() 不释放数组,要调用 data[0] 至 data[size – 1] 的析构函数。
析构时调用 clear() 然后释放数组。你的 delete _pData 应该有问题,因为它会析构名列前茅个元素。
另外,析构时并不需要把成员变量设为 null 或 0。因为调用两次析构函数是不合法的,不需要考虑这个情况。
延伸阅读:
什么是析构函数?
析构函数(destructor) 与构造函数相反,当对象结束其生命周期,如对象所在的函数已调用完毕时,系统自动执行析构函数。析构函数往往用来做“清理善后” 的工作(例如在建立对象时用new开辟了一片内存空间,delete会自动调用析构函数后释放内存)。
与构造函数相反,当对象结束其生命周期,如对象所在的函数已调用完毕时,系统会自动执行析构函数。以C++语言为例:析构函数名也应与类名相同,只是在函数名前面加一个位取反符~,例如~stud( ),以区别于构造函数。它不能带任何参数,也没有返回值(包括void类型)。只能有一个析构函数,不能重载。如果用户没有编写析构函数,编译系统会自动生成一个缺省的析构函数(即使自定义了析构函数,编译器也总是会为我们合成一个析构函数,并且如果自定义了析构函数,编译器在执行时会先调用自定义的析构函数再调用合成的析构函数),它也不进行任何操作。所以许多简单的类中没有用显式的析构函数。
文章标题:vector中clear和析构函数的区别,发布者:小编,转载请注明出处:https://worktile.com/kb/p/38597