• Effective STL(第7条)


    第7条:如果容器中包含了通过new操作创建的指针,切忌在容器对象析构前将指针delete掉

     1 //向一个vector中添加多个new出来的对象
     2 void doSomething(){
     3 vector<Widget*> vwp;
     4 for(int i = 0; i < SOME_MAGIC_NUMBER;++i)
     5   vwp.push_back(new Widget);
     6 ...
     7 }
     8 //删除vector中的对象
     9 void doSomething(){
    10 vector<Widget*> vwp;
    11 ...
    12 for(vector<Widget*>::iterator i = vwp.begin(); i!= vwp.end(); ++i)
    13   delete *i;
    14 }

    两个问题:

    1. for循环可以用for_each来替代,因为它的表达更清晰

    2. 代码不是异常安全。如果在添加或删除的过程中有异常抛出,则会发生资源泄漏。

    改进:用智能指针(被引用计数的指针)容器代替指针容器

    1 void doSomething(){
    2 typedef boost::shared_ptr<Widget> SPW;//SPW 指向Widget的shared_ptr
    3 vector<SPW> vwp;
    4 for(int i = 0; i <SOME_MAGIC_NUMBER; ++i)
    5   vwp.push_back(SPW(new Widget));
    6 ...
    7 }
  • 相关阅读:
    c++字符串
    iOS调用相册
    cocos2d-x中有一个JniHelper类详细使用
    iOS 字符串应用
    c++调用java
    iOS调用相册、相机、上传等问题
    win32中GBK、UTF8的互转
    SQL Server海量数据查询代码优化建议
    JSON中的[]和{}
    数据库范式
  • 原文地址:https://www.cnblogs.com/coolqiyu/p/5442667.html
Copyright © 2020-2023  润新知