文章目录

  • 1 继承关系类图
  • 2 代码实现

1 继承关系类图


2 代码实现

SmartPointer.h

#ifndef SMARTPOINTER_H
#define SMARTPOINTER_H#include "pointer.h"namespace LemonLib
{template <typename T>
class SmartPointer : public Pointer<T>
{public:SmartPointer(T* p = NULL) : Pointer<T>(p){}SmartPointer(const SmartPointer<T>& obj) : Pointer<T>(NULL){this->m_pointer = obj.m_pointer;const_cast<SmartPointer<T>&>(obj).m_pointer = NULL; /* 同一个对象只允许有一个智能指针指向 */}SmartPointer<T>& operator = (const SmartPointer<T>& obj){if (this != &obj)   /* 防止自赋值,需要用指针进行判断 */{T* p = this->m_pointer;this->m_pointer = obj.m_pointer;const_cast<SmartPointer<T>&>(obj).m_pointer = NULL; /* 同一个对象只允许有一个智能指针指向 */delete p;   /* 最后才delete,保证异常安全 */}return *this;}~SmartPointer(){delete this->m_pointer;}
};
}#endif // SMARTPOINTER_H

main.cpp

#include <iostream>
#include "Object.h"
#include "Exception.h"
#include "List.h"
#include "Seqlist.h"
#include "Staticlist.h"
#include "Dynamiclist.h"
#include "Staticarray.h"
#include "DynamicArray.h"
#include "Linklist.h"
#include "Staticlinklist.h"
#include "Smartpointer.h"using namespace std;
using namespace LemonLib;class Test
{public:Test(){cout << "Test()" << endl;}~Test(){cout << "~Test()" << endl;}
};int main()
{SmartPointer<Test> pointer = new Test();SmartPointer<Test> psn;psn = pointer;return 0;
}

SmartPointer相关推荐

  1. 6.Boost之smartpointer

     1自己实现一个智能指针的功能 #include <iostream> #include <string> #include <vector> #include ...

  2. C++中的运算符重载

    1.Cpp中的重载运算符和重载函数 C++允许在同一作用域中的某个函数和运算符指定多个定义,分别称为函数重载和运算符重载.重载声明是指一个与之前已经在该作用域内声明过的函数或方法具有相同名称的声明,但 ...

  3. 【转】C++面试题(四)——智能指针的原理和实现

    C++面试题(四)--智能指针的原理和实现 tanglu2004 http://blog.csdn.net/worldwindjp/   C++面试题(一).(二)和(三)都搞定的话,恭喜你来到这里, ...

  4. 内存回收的一些基本方法

    内存垃圾回收(Garbage Collection)是一个很古老的技术了,最开始在Lisp上出现.如今几乎所有高级语言都有GC,大部分程序员不再需要绞尽脑汁通宵达旦去查找内存泄露的原因了.我以前也不怎 ...

  5. C++中智能指针的设计和使用

    智能指针(smart pointer)是存储指向动态分配(堆)对象指针的类,用于生存期控制,能够确保自动正确的销毁动态分配的对象,防止内存泄露.它的一种通用实现技术是使用引用计数(reference ...

  6. c++智能指针 示例讲解

    智能指针实际上就是通过模板技术实现的一个类 内存泄露(臭名昭著的Bug)--在软件开发和测试阶段都不容易被发现 -动态申请堆空间,用完后不归还 -C++语言中没有垃圾回收的机制 -指针无法控制所指堆空 ...

  7. C++智能指针(设计和使用)

    前段时间学习project Anarchy引擎,底层很多都是用的只能指针,学了之后一直没用过的,到现在终于算是见到实际作用了,现在重新温故下 智能指针(smart pointer)是存储指向动态分配( ...

  8. DualCircleList

    文章目录 1 Linux内核链表介绍 1.1 移植Linux内核链表 1.1.1 Linux内核链表的位置及依赖 1.1.2 移植时的注意事项 1.2 Linux内核链表剖析 1.2.1 Linux内 ...

  9. DualLinkList

    文章目录 1 单链表的缺陷 2 双向链表的实现 2.1 设计思路 2.2 双向链表的继承层次结构 2.3 DualLinkList的定义 2.4 双向链表的特点 3 代码实现 4 开放性问题 1 单链 ...

最新文章

  1. less里面calc() 语法
  2. Linux桌面极速文件浏览器PCMan
  3. android 多个标签页,Android一个标签页的实现
  4. java retry(重试) spring retry, guava retrying 详解
  5. centos6 安装和配置PHP 7.0
  6. dubbo 视频教程
  7. CAD图形的缩放——放大镜
  8. educoder1-2Python 计算思维训练——公式计算
  9. html好看特效代码,教你制作漂亮的HTML代码特效贴
  10. java遗传算法编程_遗传算法示例程序
  11. 【洛谷】P5149 会议座位
  12. 一款极简聊天应用,比较完整,略好看
  13. 【AI面试】L1 loss、L2 loss和Smooth L1 Loss,L1正则化和L2正则化
  14. TMC4671-LA完全集成伺服控制器电机驱动芯片带FOC控制
  15. tf.nn.moments( )函数的使用
  16. php定义子页面模板,调用子目录中的页面模板
  17. 每周送书 |Java开发者的PaaS指南
  18. 女孩取名起名字:带染字的古风女孩名字
  19. 创建对象的几种方法的总结
  20. 使用R语言进行方差分析(ANOVA、ANCOVA)(一)

热门文章

  1. java 取出集合前两个数据库_【Java】获取两个List中不同的数据(效率非常不错)-Go语言中文社区...
  2. PyTorch 实现经典模型8:FCN
  3. Matlab篇(五)clc,close,close all,clear,clear all 的作用(转)
  4. 基于FPGA的目标点的提取与定位系统设计
  5. 基于PSO的运输优化算法的MATLAB仿真
  6. Spring框架bean的注解管理方法之一 使用注解生成对象
  7. 微服务部署:蓝绿部署、滚动部署、灰度发布等部署方案对比与总结
  8. table中tr使用toggle不好,选择换一张方式
  9. Apache Traffic Server处理请求的过程
  10. msdn library api调用问题