您的位置:学习中国 推荐教程 C++C语言 正文
原作者:kuku 添加时间:2007-06-02 原文发表:2007-06-02 人气:8 来源:互联网

本文章共4866字,分4页,当前第3页,快速翻页:
 


public:
 template // construct from
 explicit shared_ptr(Y * p); // any compatible
 template // built-in pointer,
 shared_ptr(shared_ptr const& r); // shared_ptr,

 template // weak_ptr, or
 explicit shared_ptr(weak_ptr const& r); // auto_ptr
 template
 explicit shared_ptr(auto_ptr & r);
 template // assign from
 shared_ptr& operator=(shared_ptr const& r); // any compatible
 template // shared_ptr or
 shared_ptr& operator=(auto_ptr & r); // auto_ptr
 ...
};
  除了 generalized copy constructor(泛型化拷贝构造函数),所有这些 constructors(构造函数)都是 explicit(显式)的。这就意味着从 shared_ptr 的一种类型到另一种的 implicit conversion(隐式转换)是被允许的,但是从一个 built-in pointer(内建指针)或其 smart pointer type(智能指针类型)的 implicit conversion(隐式转换)是不被许可的。(explicit conversion(显式转换)——例如,经由一个 cast(强制转型)——还是可以的。)同样引起注意的是 auto_ptrs 被传送给 tr1::shared_ptr 的 constructors(构造函数)和 assignment operators(赋值操作符)的方式没有被声明为 const,于此对照的是 tr1::shared_ptrs 和 tr1::weak_ptrs 的被传送的方式。这是 auto_ptrs 被复制时需要独一无二的被改变的事实的一个必然结果(参见《 C++箴言:使用对象管理资源 》)。

  member function templates(成员函数模板)是一个极好的东西,但是它们没有改变这个语言的基本规则。《 C++箴言:了解C++偷偷加上和调用了什么 》阐述的编译器可以产生的四个 member functions(成员函数)其中两个是 copy constructor(拷贝构造函数)和 copy assignment operator(拷贝赋值运算符)。tr1::shared_ptr 声明了一个 generalized copy constructor(泛型化拷贝构造函数),而且很明显,当类型 T 和 Y 相同时,generalized copy constructor(泛型化拷贝构造函数)就能被实例化而成为 "normal" copy constructor(“常规”拷贝构造函数)。那么,当一个 tr1::shared_ptr object 从另一个相同类型的 tr1::shared_ptr object 构造时,编译器是为 tr1::shared_ptr 生成一个 copy constructor(拷贝构造函数),还是实例化 generalized copy constructor template(泛型化拷贝构造函数模板)?

  就像我说过的,member templates(成员模板)不改变语言规则,而且规则规定如果一个 copy constructor(拷贝构造函数)是必需的而你没有声明,将为你自动生成一个。在一个 class 中声明一个 generalized copy constructor(泛型化拷贝构造函数)(一个 member template(成员模板))不会阻止编译器生成它们自己的 copy constructor(拷贝构造函数)(非模板的),所以如果你要全面支配 copy construction(拷贝构造),你必须既声明一个 generalized copy constructor(泛型化拷贝构造函数)又声明一个 "normal" copy constructor(“常规”拷贝构造函数)。这同样适用于 assignment(赋值)。这是从 tr1::shared_ptr 的定义中摘录的一段,可以作为例子: template class shared_ptr {
 public:
  shared_ptr(shared_ptr const& r); // copy constructor

  template // generalized
  shared_ptr(shared_ptr const& r); // copy constructor

  shared_ptr& operator=(shared_ptr const& r); // copy assignment
 
  template // generalized
  shared_ptr& operator=(shared_ptr const& r); // copy assignment
 
本文章更多内容<<上一页 - 1 - 2 - 3 - 4 - 下一页>>
本页地址
相关文章

探索C++的秘密之详解extern C
C++箴言:为类型信息使用特征类
创建可移植的64位应用程序代码
设计OutLook风格的工具栏
C++程序员必需的修养
如何编写异常安全的C++代码
在c++程序中重启自己的一种方法
踏入C++中的雷区——C++内存管理详解
C++的救赎 C++开源程序库评话
初学者必备:C++经典入门详细教程
C++之父Bjarne谈C++中的STL模板
对象布局及多态探索之菱形结构虚继承
如何访问模板化基类中的名字
C++对象布局及多态之虚成员函数调用
理解隐式接口和编译期多态
C++程序中导出Word文档简易方法
C++程序设计从零开始之语句
对象布局及多态实现之成员函数的调用
C++箴言:谨慎使用私有继承
C++编程人员容易犯的10个C#错误

相关评论


本文章所属分类:首页 推荐教程 C++C语言   C++C语言