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<