码迷,mamicode.com
首页 > 其他好文 > 详细

Vector成员为指针时要注意的问题

时间:2015-06-28 00:02:42      阅读:123      评论:0      收藏:0      [点我收藏+]

标签:

vector的复制是浅复制,所以复制一个包含动态内存的变量的对象的话就会出问题.
解决办法:自己写类的复制构造函数,为新对象的指针开辟新的内存空间。
但当vector离开作用域之后,只会把其成员所占的内存删除(即指针),而不会删除指针指向的内存,就会出现内存泄露。
解决办法:使用智能指针。
 1 #include <iostream>
 2 #include <memory>
 3 #include <vector>
 4 using namespace std;
 5 
 6 class A {
 7 public:
 8     ~A(){
 9         cout<<"delete"<<endl;
10     }
11 };
12 
13 void main()
14 {
15     vector<auto_ptr<A> > tmp;
16     tmp.push_back(auto_ptr<A>(new A()));
17     tmp.push_back(auto_ptr<A>(new A()));
18 }

输出结果:

a delete

a delete

通过输出结果可知,tmp在结束生命周期的时候,智能指针会把其作用指针所指向的内存释放。

 

 1 #include <iostream>
 2 #include <memory>
 3 #include <vector>
 4 using namespace std;
 5 
 6 class A {
 7 public:
 8     ~A(){
 9         cout<<"delete"<<endl;
10     }
11 };
12 
13 void main()
14 {
15     vector<A*> tmp;
16     tmp.push_back(new A());
17     delete tmp[0];
18 }
若然没有最后的 delete tmp[0]
程序是不会输出 a delete,因为vector只delete了指针(A*是元素类型),而没有删除指针指向的内容,造成内存泄露。
程序结束会直接把整个vector所占的内存回收掉。

 

Vector成员为指针时要注意的问题

标签:

原文地址:http://www.cnblogs.com/lewiskyo/p/4604839.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!