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

权限与构造函数

构造函数与析构函数与成员中的方法一样是具有权限的,而且调用者就是使用者的那段代码域
如果把构造函数设置成私有的话,那只有友元或友类才能创建。
同理,析构函数不一定要求是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(); //ok


unique_ptr
1.//不允许第二个指针对象指向同一个对象,除非右值是一个临时对象
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();//ok

2.unique_ptr支持[]数组类型,而shared_pre和auto_ptr不支持
unique_ptr<A[]> ptr(new A[]);

但切忌不能这样使用
unique_ptr<A[]> ptr(new A);

shared_ptr
//对指向同一个对象的指针会有数量的统计,只有次数变成0的时候才会释放堆内存。可能是使用了地址-引用指针数量的rbtree完成的。

继承类的内存模型

函数符

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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值