vector中reserve导致的析构函数问题
接上一节vector实现,解决杨辉三角问题时,我在最后调试的时候,发现return vv时,调用析构函数,到第四步时才析构含有14641的vector。我设置了一个全局变量i来记录。
初始为35:
当为39时,也就是第四次:发现vv中的第五个,也就是含14641的vector与当前执行析构函数的this指针指向一样,也就是该vector在析构!
那么,按常理来说,应该时vector<vector>中最后的元素先析构,但现在为什么是第四个呢?其实是因为在reserve函数里,开辟了8个空间: 你看,初始为0,给了4个空间,而push_back第五个vector时要开辟空间,开辟二倍就是8个空间!在resrve中T* tmp=new T[n],开辟了8个空间,所以在最后析构函数时,是第四个被释放,也就是倒数第四个!