侯捷 (7、8 pointer-likeclasses&function-likeclasses)

本文详细介绍了如何使用C++实现一个简单的智能指针`shared_ptr`,包括其核心成员、构造函数、拷贝构造函数、赋值运算符、析构函数以及解引用和指向对象操作符的重载。示例中展示了`shared_ptr`在管理动态分配对象方面的应用,并通过仿函数展示了其实用性。
摘要由CSDN通过智能技术生成

shared_ptr

  • 实现一个简单的shared_ptr
  1. 两个成员:引用计数与指针
  2. 成员函数:构造函数、拷贝构造函数、拷贝赋值操作符、析构函数、解引用操作符重载、指向对象操作符重载
#pragma once
#include <iostream>
using namespace std;

template <typename T>
class Shared_ptr{
public:
    Shared_ptr(T *p):ptr(p),pn(new long(1)){}
    Shared_ptr(const Shared_ptr& rhs) : pn(&(++*rhs.pn)),ptr(rhs.ptr){}
    Shared_ptr& operator=(const Shared_ptr& rhs){
        Shared_ptr temp = rhs;
        if( this->ptr == nullptr && --*this->pn == 0 )
        {
            delete ptr;
            delete pn;
        }
        ptr = temp.ptr;
        pn = temp.pn;
        return *this;
    }

    ~Shared_ptr()
    {
        if(--*pn == 0)
        {
            delete ptr;
            delete pn;
        }
    }

    int getref()
    {
        return *pn;
    }

    T& operator*()
    {
        return *ptr;
    }

    T* operator->()
    {
        return ptr;
    }

private:
    T* ptr;
    long* pn;
};

```cpp
#include <iostream>
#include "My_shared_ptr.hpp"
using namespace std;

struct a
{
    void print()
    {
        cout << "out" << endl;
    }
};

int main()
{
    My_shared_ptr<a>A = new a;
    A->print();
    return 0;
}

function-like classes(仿函数)

class a
{
	bool operator()(bool a)const
	{
		return a;
	}
};
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值