1. "智能指针"是行为像指针的对象,但它们能提供指针没有的功能:shared_ptr,weak_ptr,auto_ptr(见条款13)实现对堆内存的自动管理,STL的迭代器实现对整个容器的遍历等.

    C++内置类型指针(int*,char*等)的优势在于支持继承层次中派生类指针向基类指针的转换(当然标准库shared_ptr,weak_ptr,auto_ptr等已实现).

2. 由于同一template的不同实例化之间没有直接联系,也就是说对于自定义的智能指针(假设名为SmartPtr),如果不额外采取手段支持基层层次中派生类指针向基类指针的转换,那么SmartPtr<Base>和SmartPtr<Derived>将会被编译器认为毫无关联,也就不存在SmartPtr<Derived>向SmartPtr<Base>的隐式转换.

    要获得Smart classes之间的隐式转换能力,就要明确地写出用于隐式转换的构造函数.

    假设存在一个Base类,要实现由SmartPtr<Base的派生类>向SmartPtr<Base>的转换,显然无法为SmartPtr写出所有用于隐式类型转换的copy构造函数,因为Base的继承体系的扩充可能性是无限的.因此只能采用成员函数模板做到一劳永逸:

template<typename T>
class SmartPtr{
public:
    template<typename U>
    SmartPtr(const SmartPtr<U>& other);  //生成copy构造函数用于隐式转换
    ....
}
View Code

相关文章:

  • 2022-12-23
  • 2022-01-03
  • 2021-11-12
  • 2022-12-23
  • 2021-12-01
  • 2022-12-23
  • 2022-01-05
猜你喜欢
  • 2021-06-25
  • 2021-12-22
  • 2021-07-10
  • 2021-07-20
  • 2021-06-01
  • 2021-12-28
  • 2021-07-30
相关资源
相似解决方案