`
vearne
  • 浏览: 18903 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

智能指针的简易实现

 
阅读更多

 

#include <iostream>
using namespace std;
class smart_count{
private:
	int use_count;
public:
	smart_count(int c=0):use_count(c){
	
	}
	~smart_count(){}
	int addref(){
		return ++use_count;
	}
	int release(){
		return --use_count;
	}
};
template<class T>
class smart_ptr{
private:
	T* p;
	smart_count* u;
public:
	smart_ptr(T* tp):p(tp),u(new smart_count(1)){
	}
	smart_ptr():p(NULL),u(NULL){}
	~smart_ptr(){
		if(p&&u->release()<=0){
			delete p;
			delete u;
			p = NULL;
		}
	}
	smart_ptr(smart_ptr<T>& sp){
		p = sp.p;
		u = sp.u;
		if(u){
			u->addref();
		}
	}
	smart_ptr<T>& operator=(smart_ptr<T>& t){
		if(p&&u->release()<=0){
			delete p;
			delete u;
		}
		p = t.p;
		u = t.u;
		if(u){
			u->addref();
		}
	}
	T* operator->(){//这段代码让我困惑,这样就能调用p的函数了?
		return p;
	} 
	T& operator*(){
		return *p;
	}
	T* get(){
		return p;
	}
	void reset(T* t){
		if(p&&u->release()<=0){
			delete p;
			delete u;
		}
		p = t;
		if(p){
			u = new smart_count(1);
		}else{
			u = NULL;
		}
	
	}
	
};
class Car{
private:
	int data;
public:
	Car(int d):data(d){
		cout<<"constructor car"<<endl;
	}
	~Car(){
		cout<<"destructor car"<<endl;
	}
	void f(int a=0){
		cout<<"ok = "<<a+data<<endl;
	}
};
int main(){
	Car* cp = new Car(1);
	smart_ptr<Car> sp(cp);
	sp->f(2);
	(*sp).f(2);

}
分享到:
评论

相关推荐

    C++新特性18-智能指针的简易实现及添加模板思维导图

    博文:C++新特性18_智能指针的简易实现及添加模板配套思维导图

    VC++指针定义简易程序共2页.pdf.zip

    9. **智能指针**:在C++11及其以后的版本中,引入了智能指针(如`std::unique_ptr`、`std::shared_ptr`等),它们自动管理动态内存,防止内存泄漏。 10. **安全指针**:在VC++环境中,考虑到安全性和异常处理,推荐...

    stm32简易指针式时钟.zip

    STM32简易指针式时钟的实现是一个典型的嵌入式系统项目,它结合了微控制器、显示技术以及时间管理等多个IT领域的知识点。在这个项目中,我们主要关注STM32微控制器、ST7789显示屏以及如何用systick定时器来驱动指针...

    51实现的简易电阻测量仪

    【标题】"51实现的简易电阻测量仪"是一个基于51系列单片机的电阻检测设备,旨在提供一种简单且高效的方式来测量电阻值。51单片机因其丰富的资源和易于编程的特点,在电子工程领域广泛应用,是初学者和专业工程师的...

    用C++编写的一个简易的学生信息管理系统,用于加深对指针的理解和熟悉链表的构造与使用。用C++编写的一个简易的学生信息管理系统

    总结来说,这个项目旨在通过构建一个学生信息管理系统,帮助学习者巩固C++的基础知识,特别是指针和链表的使用,同时训练系统分析和设计能力,这是人工智能及信息技术领域不可或缺的技能。通过实际操作,学生不仅能...

    C++简易版游戏引擎开发与多线程应用实践

    内容概要:本文章介绍了一款用于练习C++编程技巧的简易游戏引擎的设计与实现,涉及模板编程、智能指针管理和多线程同步的知识点。文中提供了具体的代码实例来展示如何创建和更新游戏对象的位置以及进行游戏模拟运行...

    参考资料-基于单片机的简易智能电动车.zip

    【标题】: "基于单片机的简易智能电动车" 是一个项目主题,主要涉及的是如何利用单片机技术实现对电动车的智能化控制。这个主题涵盖了嵌入式硬件设计、单片机编程以及智能车辆控制等多个方面的知识。 【描述】: 该...

    基于51单片机简易示波器设计OLED显示(包含源程序原理图PCB)

    在电子工程领域,单片机(Microcontroller Unit, MCU)是一种集成化芯片,它将CPU、内存、定时器/计数器以及I/O接口等组件整合在一块硅片上,常用于实现各种嵌入式系统的设计。51单片机是MCU的一种,因其内部结构...

    基于C++17实现的简易线程池源码(含超详细注释+知识说明文档).zip

    【项目介绍】基于C++17的简易线程池任务描述- 实现多线程安全的任务队列,线程池使用异步操作,提交(submit)使用与thread相同。- 内部利用完美转发获取可调用对象的函数签名,lambda与function包装任务,使用RAII...

    人工智能-项目实践-搜索引擎-基于Boost库的简易搜索引擎

    Boost库包含了众多实用的组件,如智能指针、多线程支持、图形算法等,其中也包括了对搜索算法的支持。在这个项目中,我们将利用Boost库中的数据结构和算法来实现搜索引擎的基础功能。 搜索引擎的主要组成部分包括...

    简易指南针

    3.1 硬件依赖:"简易指南针"的准确性和功能实现主要依赖于手机的硬件设备,包括磁力计、GPS模块和气压传感器。这些传感器的性能直接影响到应用的使用体验。 3.2 用户界面:简洁明了的用户界面设计是"简易指南针"的...

    简易 C++ 完整版

    - **智能指针**:如std::unique_ptr、std::shared_ptr,自动管理内存,防止内存泄漏。 6. **STL(标准模板库)**: - **容器**:如vector、list、deque、set、map等,提供了存储和操作数据的结构。 - **算法**:...

    一个用QT写的简易画图板

    8. **内存管理**:QT使用智能指针如QSharedPointer和QWeakPointer来管理对象生命周期,确保资源的正确释放。 9. **多平台支持**:QT的跨平台特性意味着这个画图板不仅可以运行在Windows上,还能在Linux、macOS等...

    基于-单片机简易电子时钟设计.doc

    本资源主要介绍了基于单片机简易电子时钟的设计和实现,使用了AT89S51芯片和LED数码管为核心,构成了一个简易的电子时钟,可以准确地显示时间,并具有调整时间的功能。 关键知识点: 1. 单片机简介:单片机是一种...

    简易的MFC入门教程

    - 对象的创建、销毁以及内存管理,理解智能指针的使用。 - MFC的事件驱动编程模型,理解消息循环的工作原理。 在实际开发中,你还需要学会调试技巧,理解MFC的异常处理,以及如何利用MFC库提供的各种控件和服务来...

    基于C++哈夫曼树实现的简易版文件压缩【100012737】

    6. **内存管理**:在构建哈夫曼树和处理大量数据时,理解动态内存分配(如`new`和`delete`)和智能指针(如`std::unique_ptr`)的使用可以帮助避免内存泄漏。 7. **错误处理**:为了确保程序的健壮性,应考虑处理...

    简易黑白棋c++代码

    - 考虑使用更现代的C++特性,比如智能指针来管理动态分配的内存。 - 可以考虑使用枚举类型替代整型常量来提高代码的可读性。 - 可以添加更多的错误处理机制,比如非法输入的检测和处理。 ### 结论 此黑白棋的C++...

    51单片机智能小车文档

    - 教学与研究:51单片机的简易性和丰富的教程资源,使其成为初学者入门嵌入式系统和智能控制的理想平台。 综上所述,这份文档涵盖了51单片机的基础知识、PWM技术的应用,以及智能小车设计与实现的全过程。通过深入...

    C++简易画图软件(图形界面)

    - **智能指针**:使用智能指针(如`std::unique_ptr`或`std::shared_ptr`)来自动管理对象生命周期,防止内存泄漏。 6. **异常处理**: - **try-catch机制**:捕获并处理可能出现的运行时错误,保证程序的健壮性...

Global site tag (gtag.js) - Google Analytics