C/C++面试:手写智能指针类
发布日期:2022-03-16 03:25:34 浏览次数:13 分类:技术文章

本文共 1360 字,大约阅读时间需要 4 分钟。

template
class SharedPtr{
public: SharedPtr() : m_ptr(nullptr) , m_count_(new size_t) {
} SharedPtr(T *ptr) : m_ptr(ptr) , m_count_(new size_t) {
*m_count_ = 1; } ~SharedPtr(){
--(*m_count_); if(*m_count_ == 0){
delete m_ptr; delete m_count_; m_ptr = nullptr; m_count_ = nullptr; } } //拷⻉构造函数 SharedPtr(const SharedPtr& ptr){
m_count_ = ptr.m_count_; m_ptr = ptr.m_ptr; ++(*m_count_); } //拷⻉赋值运算 void operator=(const SharedPtr& ptr){
SharedPtr(std::move(ptr)); } //移动构造函数 SharedPtr(SharedPtr && ptr) : m_ptr(ptr.m_ptr) , m_count_(ptr.m_count_) {
++(*m_count_); } // 移动赋值运算 void operator=(SharedPtr && ptr){
SharedPtr(std::move(ptr)); } // 解引⽤ T & operator*(){
return *m_ptr; } // 箭头运算 T* operator->(){
return m_ptr; } // ᯿载bool操作符 operator bool(){
return m_ptr == nullptr; } T *get(){
return m_ptr; } size_t use_count(){
return *m_count_ ; } bool unique(){
return *m_count_ == 1; } void swap(SharedPtr & ptr){
std::swap(*this, ptr); }private: size_t *m_count_; T *m_ptr;};

转载地址:https://blog.csdn.net/zhizhengguan/article/details/122621885 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!

上一篇:算法:图论基础
下一篇:算法:图的遍历方式有哪些?

发表评论

最新留言

路过按个爪印,很不错,赞一个!
[***.219.124.196]2024年03月24日 15时07分38秒