|
热门文章
推荐文章
最新文章
|
C++箴言:用成员函数模板接受兼容类型(3)
原作者: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++C语言
C++C语言
|
文章搜索
|