c++primer plus阅读笔记(九)

来源:互联网 发布:ubuntu wine 迅雷 编辑:程序博客网 时间:2024/05/01 12:15

权限与构造函数

构造函数与析构函数与成员中的方法一样是具有权限的,而且调用者就是使用者的那段代码域如果把构造函数设置成私有的话,那只有友元或友类才能创建。同理,析构函数不一定要求是public的,如果析构函数是private,那除了友元和友元类之外,只能使用堆的方式建立对象class a{private:    ~a(){        ...    }};main{    a Temp;         //invalid,无法使用析构函数    a* temp=new a;//ok,可以再友元类中使用构造函数。}

智能指针

class A{...};auto_ptr 已被摒弃//原理就是把new分配的堆内存放到智能指针对象中,当智能指针随着栈解析的时候,堆内存就被delete了。auto_ptr<A> ptr(new A);//但是缺点很明显,相同的auto_ptr对象进行拷贝构造的时候会导致同一块堆内存被析构两次等问题。//因此,auto_ptr在指针对象之间赋值的时候会完全将控制权转移auto_ptr<A>ptr2=ptr;ptr->fn();  //error 没有该对象了ptr2->fn(); //okunique_ptr1.//不允许第二个指针对象指向同一个对象,除非右值是一个临时对象unique_ptr<A> ptr(new A);unique_ptr<A> ptr2=ptr;     //error----------------------------------------------------unique_ptr<A> fn(){    return unique_prt<A> (new A)  ;}unique_ptr temp=fn();//ok2.unique_ptr支持[]数组类型,而shared_pre和auto_ptr不支持unique_ptr<A[]> ptr(new A[]);但切忌不能这样使用unique_ptr<A[]> ptr(new A);shared_ptr//对指向同一个对象的指针会有数量的统计,只有次数变成0的时候才会释放堆内存。可能是使用了地址-引用指针数量的rbtree完成的。

继承类的内存模型

函数符

可以类似于函数的使用方式的符号,如函数名, 函数指针,重载了()运算符的类对象等。