STL::Vector

class Widget { ... };
typedef vector<Widget> WidgetContainer;
typedef WidgetContainer::iterator WCIterator;
WidgetContainer cw;
Widget bestWidget;
...
WCIterator i = find(cw.begin(), cw.end(), bestWidget);


容器容纳了对象,但不是你给它们的那个对象。此外,当你从容器中获取一个对象时,你所得到的对象不是
容器里的那个对象。取而代之的是,当你向容器中添加一个对象(比如通过insert或push_back等),进入容
器的是你指定的对象的拷贝。拷进去,拷出来。这就是STL的方式。


下面代码直接导致一个内存泄漏:

void doSomething()
{
vector<Widget*> vwp;
for (int i = 0; i < SOME_MAGIC_NUMBER; ++i)
vwp.push_back(new Widget);
... // 使用vwp
} // Widgets在这里泄漏

当vwp除了生存域后,vwp的每个元素都被销毁,但那并不改变从没有把delete作用于new得到的对象这个事
实。那样的删除是你的职责,而不是vector的。这是一个特性。只有你知道一个指针是否应该被删除。
 


通常,你需要它们被删除。当情况如此时,可以很简单地实现:

void doSomething()
{
vector<Widget*> vwp;
... // 同上
for (vector<Widget*>::iterator i = vwp.begin();
i != vwp.end(),

++i) {
delete *i;
}
}



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值