求教auto_ptr源码中模板形参的问题

wokonglinglude wokonglinglude 墨衍会员 · AI 创作全网分发 墨衍智能分发 通过墨衍一键同步至各平台 可同步平台 CSDN微信公众号微博知乎掘金百家号博客园抖音小红书 你的文章也可以这样分发 墨衍会员 ¥399起/年,写一次发全网 我也要 + 加入社区
各位大虾们好,在看到auto_ptr源码的时候有个问题不解现在贴下打问号的位置,求助。

template<class _Ty>
class auto_ptr
{ // wrap an object pointer to ensure destruction
public:
typedef _Ty element_type;

explicit auto_ptr(_Ty *_Ptr = 0) _THROW0()
: _Myptr(_Ptr)
{ // construct from object pointer
}


auto_ptr(auto_ptr<_Ty>& _Right) _THROW0()
: _Myptr(_Right.release())
{ // construct by assuming pointer from _Right auto_ptr
}

auto_ptr(auto_ptr_ref<_Ty> _Right) _THROW0()
: _Myptr(_Right._Ref.release())
{ // construct by assuming pointer from _Right auto_ptr_ref
}

//?????????????????????????????????????????????????????????????????????????
//此处class_other是何解,好奇怪的语法,貌似是个构造函数。求解此处的详细剖析。
//模板类里面再次出现模板用处,还有operator 一个类型不明白
//??????????????????????????????????????????????????????????????????????????
template<class _Other>
operator auto_ptr<_Other>() _THROW0()
{ // convert to compatible auto_ptr
return (auto_ptr<_Other>(*this));
}

template<class _Other>
operator auto_ptr_ref<_Other>() _THROW0()
{ // convert to compatible auto_ptr_ref
return (auto_ptr_ref<_Other>(*this));
}

template<class _Other>
auto_ptr<_Ty>& operator=(auto_ptr<_Other>& _Right) _THROW0()
{ // assign compatible _Right (assume pointer)
reset(_Right.release());
return (*this);
}

template<class _Other>
auto_ptr(auto_ptr<_Other>& _Right) _THROW0()
: _Myptr(_Right.release())
{ // construct by assuming pointer from _Right
}

auto_ptr<_Ty>& operator=(auto_ptr<_Ty>& _Right) _THROW0()
{ // assign compatible _Right (assume pointer)
reset(_Right.release());
return (*this);
}

auto_ptr<_Ty>& operator=(auto_ptr_ref<_Ty>& _Right) _THROW0()
{ // assign compatible _Right._Ref (assume pointer)
reset(_Right._Ref.release());
return (*this);
}

~auto_ptr()
{ // destroy the object
delete _Myptr;
}

_Ty& operator*() const _THROW0()
{ // return designated value
return (*_Myptr);
}

_Ty *operator->() const _THROW0()
{ // return pointer to class object
return (&**this);
}

_Ty *get() const _THROW0()
{ // return wrapped pointer
return (_Myptr);
}

_Ty *release() _THROW0()
{ // return wrapped pointer and give up ownership
_Ty *_Tmp = _Myptr;
_Myptr = 0;
return (_Tmp);
}

void reset(_Ty* _Ptr = 0)
{ // destroy designated object and store new pointer
if (_Ptr != _Myptr)
delete _Myptr;
_Myptr = _Ptr;
}

private:
_Ty *_Myptr; // the wrapped object pointer
};
...全文

相关推荐

C++智能指针详解[可运行源码]

本文详细介绍了C++中的四种智能指针:auto_ptr、unique_ptr、shared_ptr和weak_ptr。首先解释了智能指针的作用,即解决传统指针需要手动释放内存导致的内存泄漏问题。接着分别阐述了四种智能指针的特点:auto_ptr已被废弃,unique_ptr具有唯一拥有权,shared_ptr支持多指针共享资源并通过引用计数管理内存,weak_ptr则是一种弱引用,需配合shared_ptr使用。文章还提供了每种智能指针的代码示例,并比较了它们的内存占用情况。最后强调了智能指针的使用需包含<memory>头文件,并推荐使用make_shared初始化shared_ptr以提高安全性。

Wind6

vs2019 c++20 规范的 STL 库的智能指针 shared、unique 、weak 、auto 及 make_** 函数的源码注释汇总,和几个结论

STL 库代码肯定是不会错的。可以得出结论啊: unique_ptr 声明时的模板参数 _Ty 的含义不同于模板定义时的模板参数 _Ty, 模板声明时的删除器的默认值是对第一个模板实参的整体取 default_delete ,所以选择了正确的删除器模板。智能指针的源码都在 头文件中。因为头文件太长,再者本次整理是基于以前的零散的模板分析。故相当于抽取了该头文件中关于智能指针的源码进行分析,注释。我们要分析、猜测编译器在泛型推导时是如何确定模板参数的类型的。时,其默认的删除器是哪个?

zhangzhangkeji

C++智能指针详解[源码]

本文详细介绍了C++中的智能指针,包括其原理、用法和适用场景。智能指针是C++11引入的一种自动管理内存的工具,能够有效避免内存泄漏等问题。文章首先通过一个内存泄漏的例子说明了手动管理内存的弊端,随后介绍了三种智能指针:auto_ptr、unique_ptr和shared_ptr。auto_ptr是第一代智能指针,存在管理权转移的问题;unique_ptr在auto_ptr的基础上进行了改进,禁止了赋值和复制;shared_ptr则通过引用计数机制允许多个智能指针共同管理同一块内存。此外,文章还提供了手写shared_ptr的示例代码,帮助读者深入理解其实现原理。最后,文章指出智能指针虽然强大,但在复杂程序中仍需进一步探索其优化和运用方式。

n4o5p6q7r

C++面试八股问题默写模板[项目源码]

本文详细列出了C++后端开发面试中常见的八股问题及其解答,涵盖了从基础语法到高级特性的各个方面。内容包括C程序编译步骤、static修饰符的作用、const指针的区别、inline与#define的差异、sizeof与strlen的区别、野指针的成因与避免方法、数组指针与指针数组的区别、值传递与地址传递的不同、指针函数与函数指针的区别、C与C++的区别、进程内存布局、malloc与new的区别、引用的本质与用途、函数重载、类型转换、封装、访问权限、构造函数与析构函数、深拷贝与浅拷贝、静态成员、空对象内存占用、友元、继承方式、构造与析构顺序、多继承问题、虚基类指针与表、多态、覆盖重写与函数重载的区别、动态多态底层原理、抽象类、虚析构、虚函数表与虚基类表的创建时机与存储位置、类模板与函数模板的区别、STL及其六大组件、STL容器分类、vector扩展机制、list与set的底层实现、map与unordered_map的区别、各种容器的时间复杂度、仿函数、算法头文件与常用算法、迭代器与指针的区别、decltype与auto的区别、lambda表达式的捕获方式与本质、std::function与lambda的区别、移动构造函数、std::bind、左值与右值、完美转发、std::move与std::forward的区别、shared_ptr循环引用与weak_ptr、unique_ptr、make_shared效率高的原因、智能指针的线程安全问题、模板特化与偏特化、std::lock防止死锁、unique_lock与lock_guard的区别、协程与线程的区别、设计模式的三大类与原则、单例模式及其应用等。此外,还涉及操作系统、计算机网络、数据结构与算法、分布式系统、中间件等相关知识,为C++后端开发面试提供了全面的参考。

v5w6x

MDR5_C++_源码.rar

MDR5_C++_源码.rar

mYlEaVeiSmVp
评论 11
收藏 已收藏
分享
返回顶部
wokonglinglude
C++ 语言 65,214 成员 250,514 内容