-
- /* 结论:
- vector的存在可以使开发者不必关心内存的申请和释放。但是,vector背后的内存分配是按照2的倍数分配内存的。当当前容量对插入元素不够时,分配一块新的内存,这块内存的容量是原vector容量的2倍大小,然后复制旧内存,释放旧内存,可能多次涉及拷贝构造函数和析构函数,而这也正是vector的劣势所在。*/
在使用cocos2d-x引擎的时候,多次调用cclayer、ccsprite的析构函数,程序会崩掉。
- #include <iostream>
- #include <vector>
- using namespace std;
- int main()
- {
- vector<int> iVec;
- cout << "size: " << iVec.size() << endl;
- cout << "capacity " << iVec.capacity() << endl << endl; //1个元素, 容器容量为1
- iVec.push_back(1);
- cout << "size: " << iVec.size() << endl;
- cout << "capacity " << iVec.capacity() << endl << endl; //2个元素, 容器容量为2
- iVec.push_back(2);
- cout << "size: " << iVec.size() << endl;
- cout << "capacity " << iVec.capacity() << endl << endl; //3个元素, 容器容量为4
- iVec.push_back(3);
- cout << "size: " << iVec.size() << endl;
- cout << "capacity " << iVec.capacity() << endl << endl; //4个元素, 容器容量为4
- iVec.push_back(4);
- iVec.push_back(5);
- cout << "size: " << iVec.size() << endl;
- cout << "capacity " << iVec.capacity() << endl << endl; //5个元素, 容器容量为8
- iVec.push_back(6);
- cout << "size: " << iVec.size() << endl;
- cout << "capacity " << iVec.capacity() << endl << endl; //6个元素, 容器容量为8
- iVec.push_back(7);
- cout << "size: " << iVec.size() << endl;
- cout << "capacity " << iVec.capacity() << endl << endl; //7个元素, 容器容量为8
- iVec.push_back(8);
- cout << "size: " << iVec.size() << endl;
- cout << "capacity " << iVec.capacity() << endl << endl; //8个元素, 容器容量为8
- iVec.push_back(9);
- cout << "size: " << iVec.size() << endl;
- cout << "capacity " << iVec.capacity() << endl << endl; //9个元素, 容器容量为16
- /* 结论:
- vector的存在可以使开发者不必关心内存的申请和释放。但是,vector背后的内存分配是按照2的倍数分配内存的。当当前容量对插入元素不够时,分配一块新的内存,这块内存的容量是原vector容量的2倍大小,然后复制旧内存,释放旧内存,可能多次涉及拷贝构造函数和析构函数,而这也正是vector的劣势所在。*/
- return 0;
- }