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

 

 

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

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

Item 3 中提到若是将对象直接放入容器中,可能会引起问题:c++

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

对此的简单方法就是在容器中保存对象 指针 ,但若是直接保存指针的话,咱们须要本身维护和管理内存,容易混乱。最好的方法是保存 智能指针(smart pointer shared_ptr))sql

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

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 / 。post

假设若是咱们声明了一个用于存放 autoptr 的容器 COAP ,那么在对 COAP 进行操做时,对象的全部权将不可避免的会转移给其余的对象,最后致使容器中的 AutoPtr 指向 NULL ,从而引起各类问题。spa

相关文章
相关标签/搜索