Where there is a dream ,there is hope

  C++博客 :: 首页 :: 联系 :: 聚合  :: 管理
  64 Posts :: 0 Stories :: 8 Comments :: 0 Trackbacks

常用链接

留言簿(1)

我参与的团队

搜索

  •  

最新评论

阅读排行榜

评论排行榜

条款五,尽量使用区间成员函数代替他们的单元素兄弟
*对于所有标准序列容器(vector, string, deque, 和list)都有效,无论何时你必须完全替代一个容器的内容,你就应该想到赋值
*insert,每次都必须移动为新元素腾出空间
*序列容器erase时返回迭代器,而关联容器返回空

条款六,警惕C++最令人恼怒的解析
int g( double pf() ) pf其实是一个指针
int g( double() );同上,函数名省略
int g( double x) == int g( double (x) )

条款七, 当时用new得指针的容器时,记得在销毁容器前delete那些指针
*这样的代码造成内存泄露

void doSomething()
{
 vector
<Widget*> vwp;
 
for(int i =0 ; i < SOME_MAGIC_NUMBER; ++i)
 
{
  vwp.push_back(
new Widget);
 }

 
//使用完毕的时候,vwp内的Widget对象没有释放
}



最简单的实现方法是

void doSomething()
{
 
for(vector<Widget*>::iterator i = vwp.begin(); != vwp.end(); ++i)
 
{
  delete 
*i;
 }

}



这样的问题是for循环代码多余for_each,但没有使用for_each简单明了
另一个问题是这段代码不是异常安全的

简洁不考虑异常的方法

struct DeleteObject{
 template
<typename T>
 
void operator()(const T* ptr) const
 
{
  delete prt;
 }

}
;
void doSomething()
{
 deque
<SpecialString*> dssp;
 for_each( dssp.begin(), dssp.end(), DeleteObject());
}


void doSomething()
{
 typedef boost::shar_ptr
<Widget> SPW;
 vector
<SPW> vwp;
 
for(int i = 0; i <SOME_MAGIC_NUMBER; ++i)
 
{
  vwp.push_back( SPW(
new Widget));
 }

}



 

posted on 2011-10-11 15:03 IT菜鸟 阅读(315) 评论(0)  编辑 收藏 引用 所属分类: EFFECTIVE-STL学习笔记

只有注册用户登录后才能发表评论。
网站导航: 博客园   IT新闻   BlogJava   知识库   博问   管理