zoukankan      html  css  js  c++  java
  • Effective STL 笔记 -- Item 6 ~ 7: Container and Object Pointer

    Effective STL 笔记 – Item 6 ~ 7: Container and Object Pointer

    中间两次笔记被删掉了,简单补一下:

    Item 3 中提到如果将对象直接放入容器中,可能会引发问题:

    • 大量的拷贝行为要求对象的拷贝构造代价要小
    • 试图将派生类放入存放基类的容器中会引发 Slicing 问题。

    对此的简单方法就是在容器中保存对象 指针 ,但如果直接保存指针的话,我们需要自己维护和管理内存,容易混乱。最好的方法是保存 智能指针(smart pointer shared_ptr))

    需要注意的是,这里提倡的是 shared_ptr,不是 autoptr,C++ 标准要求不能声明存放 autoptr 的容器 (Container of AutoPtr, COAP)。原因在于,根据定义,AutoPtr 的 Copy 要求将对象的所有权 (ownership) 转给新的 AutoPtr:

    1: auto_ptr<int> p1(new int(1));
    2: auto_ptr<int> p2(p1);
    3: p1 = p2;
    

    上面的示例中,第一行新建了一个 AutoPtr 对象 p1 用于包装一个 int 指针,第一行执行后,p2 接手了该指针,同时,p1 指向 / NULL / 。第三行执行后, p1 重新获取指针,但 p2 被指向 / NULL / 。

    假设如果我们声明了一个用于存放 autoptr 的容器 COAP ,那么在对 COAP 进行操作时,对象的所有权将不可避免的会转移给其他的对象,最后导致容器中的 AutoPtr 指向 NULL ,从而引发各种问题。

  • 相关阅读:
    ASIHTTPRequest详解
    Aviary 滤镜 教程 照片编辑器
    IOS设计模式之四(备忘录模式,命令模式)
    IOS设计模式之三(适配器模式,观察者模式)
    IOS设计模式之二(门面模式,装饰器模式)
    MysqlNDB集群配置与管理
    MySqlNDB使用自带的ndb_setup.py安装集群
    Servlet引擎tomcat之安装
    分布式之Zookeeper使用
    分布式之ZookeeperMac安装
  • 原文地址:https://www.cnblogs.com/yangyingchao/p/3396717.html
Copyright © 2011-2022 走看看