Effective c++--智能指针 & 函数模板

本文探讨了C++中的智能指针shared_ptr如何指定资源释放函数,以及其构造函数的特性。同时,文章阐述了函数参数传递的方式,强调了by reference在避免对象切割问题上的优势,但指出对于内建类型,by value更优。文章还提醒开发者避免返回局部对象的指针或引用,并讨论了函数模板的特化和重载。最后,文章提到了继承和遮掩问题,以及模板作为静态多态的机制。
摘要由CSDN通过智能技术生成

Shared_ptr允许当智能指针被建立起来是指定一个资源释放函数绑定于智能指针身上,也就是说在shared_ptr被初始化的同时也可以指定其管理的资源的释放函数。Shared_ptr提供的某个构造函数接受两个实参:一个是被管理的指针,另一个是引用次数变为0时将被调用的“删除器”。Shared_ptr构造函数坚持其第一个参数必须是个指针。它支持定制型删除器。

 

缺省情况下C++以by value方式传递对象至函数,这种情况下函数参数都是以实际参数的副本为初值,而调用端获得的也是函数返回值的一个副本。这些副本系有对象的copy构造函数产出。这就产生了by reference方式传递参数的方法。

 

以by reference方式传递参数也可以避免对象切割问题,当一个derived class对象以by value方式传递并被视为一个base class对象,base class的copy构造函数被调用,但是属于derived class对象的那些属性全部被切割,仅仅留下一个base class对象。解决对象被切割的问题就是by reference的方式传递参数给函数。

但是对于内建类型,by value比by reference的方式要好很多。

 

绝不要返回pointer或reference指向一个local stack对象,或返回reference指向一个type多个这样的对象。

 

 

对一个函数模板惊醒特化:

Template <>

Void swap<widget> (widget&a,widget& b){}  //这就是对swap函数的特化

 

Tempalate <typename T>

Void swap<widget<T> > (widget<

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值