永发信息网

vector<自定义类型*>怎样释放才是正确的?

答案:3  悬赏:20  手机版
解决时间 2021-03-01 02:02
如题vector 中存放的是自定义类型的指针,应该怎样释放才是正确的?
最佳答案
vector提供删除节点的接口 这是VC6下的源码
iterator erase(iterator _P)
{copy(_P + 1, end(), _P);<br> _Destroy(_Last - 1, _Last);<br> --_Last;<br> return (_P); }
void _Destroy(iterator _F, iterator _L)
{for (; _F != _L; ++_F)<br> allocator.destroy(_F); }
你所需要的只是提供删除的接口
即定义自己类型的析构函数就可以了
全部回答
遍历一遍,手动delete掉,别忘记还要erase
如果是自己new出来的指针,除了用智能指针包装,就只有自己手动delete了 class A; vector<A*> a; a.push_back( new A ); a.push_back( new A ); a.push_back( new A ); .... for_each( a.begin(), a.end(), []( A* a ){ delete a; } ); // 释放 或者你可以使用智能指针,比如shared_ptr: #include <iostream> #include <vector> #include <boost\shared_ptr.hpp> using namespace std; class A { public: ~A() { cout << "destructor called.\n"; } }; int main() { { vector<shared_ptr<A>> a; for ( int i = 0; i < 10; ++i ) { a.push_back( shared_ptr<A>( new A ) ); } } cin.get(); } 如果你指的是vector中存放指针本身的这部分内存,这个你不用担心,vecotor会自动清理的,如楼上所说。
我要举报
如以上问答信息为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
粤语1分等于多少厘米
【讽刺领导无能的句子】形容男人懦弱无能没有
邯郸市魏县车往镇在建国前的历史
世界上有真的古武术吗?谢谢了,大神帮忙啊
富吉路/X744(路口)我想知道这个在什么地方
婴儿吃什么消炎药好
VF表达式1VF中,表达世LEN(HAS BEEN ERASED)的
去澳大利亚留学考雅思还是托福
养老保险户籍地址少了一个字怎么办
单选题2011年1月,中国选手 在澳大利
中国人群的吸烟率究竟有多高—三项全国烟草流
贵和酒店地址在哪,我要去那里办事
炮制后具有止血止泻功能的是()A.煨肉豆蔻B.
神山坡我想知道这个在什么地方
国服的账号可以在国外登STEAM打游戏么
推荐资讯
为什么越健身越胖
电视新闻应该以哪些方面的新闻为主?
铅板用什么胶粘
火车票硬卧上铺和下铺价钱一样吗
沙县检察院反贪局我想知道这个在什么地方
女人香美容养生馆怎么去啊,有知道地址的么
西排山子地址在什么地方,想过去办事
你发什麼呆啊! 站在那里干什麼!快来帮忙!
暴君用英语怎么说
桂林公出,有一天一宿的闲时,能怎么溜达溜达
私房目前准备装几个探头,求教知道需要哪些装
以静开头的成语,求答案
正方形一边上任一点到这个正方形两条对角线的
阴历怎么看 ?