C++vector的存储方式,是把数据赋值到堆中吗
structBook{stringName;intPrice;};vector<Book>nInt;voiddemo(){for(inti=0;i<10;i++){Boo...
struct Book{ string Name; int Price;};vector<Book>nInt;void demo(){ for (int i = 0; i < 10;i++) { Book tmp; tmp.Price = i; nInt.push_back(tmp); }}int _tmain(int argc, _TCHAR* argv[]){
demo(); cout << nInt[10].Price;//为什么可以正常输出 return 0;}//问vector到底保存的是什么//我的想法是vector的存储方式是在堆中新建内存空间,然后把整个对象的数据复制到容器的内存//所以局部变量执行完毕后的确删除了,但是vector中的数据并不会删除//nInt.~ vector <int>()是不是就是清除了nInt这个容器,nInt讲不能再使用//nInt.clear()是清除这个容器所有的元素,也就是内存数据,这个容器还可以使用
最后就是问这个代码,也就是这种方法安全吗? 展开
demo(); cout << nInt[10].Price;//为什么可以正常输出 return 0;}//问vector到底保存的是什么//我的想法是vector的存储方式是在堆中新建内存空间,然后把整个对象的数据复制到容器的内存//所以局部变量执行完毕后的确删除了,但是vector中的数据并不会删除//nInt.~ vector <int>()是不是就是清除了nInt这个容器,nInt讲不能再使用//nInt.clear()是清除这个容器所有的元素,也就是内存数据,这个容器还可以使用
最后就是问这个代码,也就是这种方法安全吗? 展开
1个回答
展开全部
放在栈里面的nInt.push_back(tmp);实际上放的是tmp的拷贝。你要是没有写拷贝构造函数默认的按位拷贝,这样不安全,你要是写了拷贝构造函数就按按照你的方法在复制。
追问
也就是说我的想法是准确的是吧?
他的确是把数据保存在堆中.
刚才看了下你说的按位拷贝,不安全应该是说的指针指向同内存的问题吧.
tmp数据里没有指针应该安全的吧?
又该如何重写口碑构造函数呢?
追答
是放在栈里面的。自是可以你放进去的对象可以有指向堆里面的指针。
在释放对象集合的时候,调用了对象的系构函数。
你可以看下这个
http://blog.csdn.net/chujiangke001/article/details/8765686
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询