#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_智能指针的简易实现及添加模板配套思维导图
基于51单片机简易示波器设计OLED显示(包含源程序原理图PCB)
**②基于双管道的简易CGI实现**:修改stdin的定向为管道写端,实现终端对客户端的直接输入和对服务端的发送;\ **6)改进方向**:待进行压力测试并提高抗压性能、可处理的HTTP请求较为简单(数据体的处理还待增加...
free:该函数获得指向由 malloc 分配的内存片段的指针,并将其释放,以便以后的程序或操作系统使用(实际上,一些 malloc 实现只能将内存归还给程序,而无法将内存归还给操作系统)。 物理内存和虚拟内存 要理解...
3.3.3 范例:智能指针的使用 52 第4章 场景的组织结构 55 4.1 节点的定义与种类 56 4.1.1 场景图形bvh树 56 4.1.2 节点的父子关系 58 4.1.3 叶节点与组节点 59 4.1.4 节点的功能与分类 62 4.2 节点的访问 65 ...
【实例63】简易智能电动车... 145 【实例64】洗衣机控制器... 149 第九章.... 152 【实例65】串行A/D转换... 152 【实例66】并行A/D转换... 153 【实例67】模拟比较器实现A/D转换... 154 【实例68】串行D/A转换... ...
除此之外,教程还包含多个实战项目,如简易的游戏开发、数据结构库的实现和一个小型的数据库系统,旨在通过实践加深对C++编程的理解。无论你是编程新手还是希望提升现有C++技能的开发者,本教程都将是你不可多得的...
free:该函数获得指向由 malloc 分配的内存片段的指针,并将其释放,以便以后的程序或操作系统使用(实际上,一些 malloc 实现只能将内存归还给程序,而无法将内存归还给操作系统)。 物理内存和虚拟内存 要...
由于具有上述优点,在我国,单片机已广泛 地应用在工业自动化控制、自动检测、智能仪器仪表、家用电器、电力电子、机电一体 化设备等各个方面,而51单片机是各单片机中最为典型和最有代表性的一种。这次毕业 设计...
★ 当把"智能指针/stl迭代器/C指针/前三者嵌套"都视为指针时,其内的最终值(非指针值)是一致的,在模板函数中,某些场景需要取得其最终的非指针值。 应用场景:转发模板函数,如 template<typename T> void ...
7.1.5 伴随结构的智能感知帮助 298 7.1.6 RECT结构 299 7.1.7 使用指针处理结构 300 7.2 数据类型、对象、类和实例 301 7.2.1 类的起源 303 7.2.2 类的操作 303 7.2.3 术语 303 7.3 理解类 304 7.3.1 定义...
帕斯卡尔旨在⿎励良好的编程习惯⼩号,并介绍构造,如指针,它⼀个很好的"敲门砖",从普通版使⼀个 更复杂的语⾔。这⼏天,这两种语⾔都有点过时,有利于"⽇常使⽤"。但是,如果要进⾏⼤量的低级编码,或者想要熟悉...
实例093 程序运行时智能增减控件 134 实例094 多控件的焦点循环移动 136 实例095 动态创建控件 138 实例096 在Button按钮上绘图 138 2.11 焦点变换与输入控制 140 实例097 按回车键焦点在控件中移动的录入窗口 ...
实例093 程序运行时智能增减控件 134 实例094 多控件的焦点循环移动 136 实例095 动态创建控件 138 实例096 在Button按钮上绘图 138 2.11 焦点变换与输入控制 140 实例097 按回车键焦点在控件中移动的录入窗口 ...
实例093 程序运行时智能增减控件 134 实例094 多控件的焦点循环移动 136 实例095 动态创建控件 138 实例096 在Button按钮上绘图 138 2.11 焦点变换与输入控制 140 实例097 按回车键焦点在控件中移动的录入窗口 ...
实例093 程序运行时智能增减控件 134 实例094 多控件的焦点循环移动 136 实例095 动态创建控件 138 实例096 在Button按钮上绘图 138 2.11 焦点变换与输入控制 140 实例097 按回车键焦点在控件中移动的录入窗口 ...