《C++标准程序库》读书笔记(二)

简介:
,下面这段代码会引起异常,因为所有权已经转移,而通过by reference方式传递auto_ptr更是糟糕的
若改为: const auto_ptr<int> p(new int);则会在编译时提示错误.因此我们可以通过常数型auto_ptr来终结所有权转移,它并不是表示你不能更改auto_ptr所拥有的对象,而是不能更改auto_ptr的拥有权,就此特性而言,它比较类似常数指针,而不是指向常数的指针.

复制代码
template <typename T>
void bad_print(auto_ptr<T> p)
{
    if(p.get()==NULL)
        cout<<"null";
    else
        cout<<*p;
}
int main(int argc, char* argv[])
{
    auto_ptr<int> p(new int);
    *p = 42;
    bad_print(p);
    *p = 3;
    return 0;
}
复制代码
2,auto_ptr之间不能共享拥有权,一个auto_ptr不能指向另一个auto_ptr所拥有的对象,否则当一个指针删除该对象后,就糟糕了.auto_ptr不能指向数组,因为它是通过delete而不是delete[]来释放其所拥有的对象.它也不是一个引用计数型指针.因为在拷贝和赋值后,原来的auto_ptr和新产生的auto_ptr并不相等,而是原auto_ptr会交出拥有权,而不是拷贝给新auto_ptr,因此也不要将auto_ptr作为标准容器的元素.

3,下面重载的输出运算符的第二个参数是一个const reference,所以并没有发生拥有权的转移.

复制代码
template <class T>
ostream& operator<< (ostream& strm, const auto_ptr<T>& p)
{
    // does p own an object ?
if (p.get() == NULL) 
{
        strm << "NULL";         // NO: print NULL
    }
    else {
        strm << *p;             // YES: print the object
    }
    return strm;
}
复制代码
4,容器可分为两类:1)序列式容器,这是ordered collection,每个元素都有固定位置,取决于插入时机和地点,和元素值无关.它们是:vector,deque,list;2)关联式容器.这是sorted collection,元素位置取决于特定的排序准则,它们是:set,multiset,map,multimap.

关联式容器自动对其元素排序,并不意味着它们就是用来排序的,这只迭是它的一个副作用而已.

5,每个容器将其迭代器以嵌套的方式定义于内部,因此各种迭代器的接口相同,类型却不同.迭代器有以下两种类型:1)双向迭代器.可以双向行进:以递增运算前进或以递减运算后退,list,set,multiset,map和multimap提供的迭代器都是此类.2)随机存取迭代器.不仅具备双向迭代器的所有属性,还具备随机访问能力.它们提供了”迭代器算术运算”必要的操作符.可以对迭代器增加或减少一个偏移量,处理迭代器之间的距离,或是使用<和>之类的相对关系操作符来比较两个迭代器.vector,deque和strings所提供的迭代器都属于此类.为了写出尽可能与容器类型无关的泛型程序代码,最好不使用随机存取迭代器的特有操作.



本文转自Phinecos(洞庭散人)博客园博客,原文链接:http://www.cnblogs.com/phinecos/archive/2008/08/19/1270922.html,如需转载请自行联系原作者
目录
相关文章
|
5月前
|
存储 程序员 C语言
c++primer plus 6 读书笔记 第四章 复合类型
c++primer plus 6 读书笔记 第四章 复合类型
|
5月前
|
编译器 C++
c++primer plus 6 读书笔记 第十章 对象和类
c++primer plus 6 读书笔记 第十章 对象和类
|
5月前
|
算法 小程序 IDE
c++primer plus 6读书笔记第一章预备知识
c++primer plus 6读书笔记第一章预备知识
|
5月前
|
编译器 数据安全/隐私保护 C++
c++primer plus 6 读书笔记 第十三章 类继承
c++primer plus 6 读书笔记 第十三章 类继承
|
5月前
|
C++
c++primer plus 6 读书笔记 第十四章 C++中的代码重用
c++primer plus 6 读书笔记 第十四章 C++中的代码重用
|
5月前
|
C++
c++primer plus 6 读书笔记 第十一章 使用类
c++primer plus 6 读书笔记 第十一章 使用类
|
5月前
|
编译器 C++
c++primer plus 6 读书笔记 第八章 函数探幽0
c++primer plus 6 读书笔记 第八章 函数探幽0
|
5月前
|
编译器 vr&ar C++
c++primer plus 6 读书笔记 第七章 函数--C++的编程模块
c++primer plus 6 读书笔记 第七章 函数--C++的编程模块
|
5月前
|
C++
c++primer plus 6 读书笔记 第六章 分支语句和逻辑运算符
c++primer plus 6 读书笔记 第六章 分支语句和逻辑运算符
|
5月前
|
C语言 C++ 容器
c++primer plus 6 读书笔记 第五章 循环和关系表达式
c++primer plus 6 读书笔记 第五章 循环和关系表达式