c++智能指针 示例讲解
智能指针实际上就是通过模板技术实现的一个类
内存泄露(臭名昭著的Bug)——在软件开发和测试阶段都不容易被发现
-动态申请堆空间,用完后不归还
-C++语言中没有垃圾回收的机制
-指针无法控制所指堆空间的生命周期
当代C++软件平台中的智能指针
-指针生命周期结束时主动释放堆空间
-一片堆空间最多只能由一个指针标识
-杜绝指针运算和指针比较
智能指针的设计方案
-通过类模板描述指针的行为
能够定义不同类型的指针对象
-重载指针特征操作符(->和*)
利用对象模拟原生指针的行为
SmartPointer.h
#ifndef SMARTPOINTER_H_
#define SMARTPOINTER_H_namespace DTLib
{
template <typename T>
class SmartPointer
{
protected:T* m_pointer;
public:SmartPointer(T* p =NULL){m_pointer = p;}T* operator ->(){return m_pointer;}T& operator *(){return *m_pointer;}SmartPointer(const SmartPointer<T>& obj){m_pointer = obj.m_pointer;const_cast<SmartPointer<T> &>(obj).m_pointer = NULL;}SmartPointer<T>& operator = (const SmartPointer<T>& obj){if(this != &obj){delete m_pointer;m_pointer = obj.m_pointer;const_cast<SmartPointer<T> &>(obj).m_pointer = NULL;}return *this; //可以支持连续赋值}T* get(){return m_pointer;}bool isNull(){return (m_pointer == NULL);}~SmartPointer(){delete m_pointer;}};}#endif // SMARTPOINTER_H_
main.cpp
#include <iostream>
#include "SmartPointer.h"using namespace std;
using namespace DTLib;class Test
{
public:Test(){cout << "Test()" << endl;}~Test(){cout << "~Test()" << endl;}};int main()
{SmartPointer<Test> sp = new Test();SmartPointer<Test> nsp;nsp = sp;cout << sp.isNull() << endl;cout << nsp.isNull() << endl;cout << "sp = " << sp.get() << endl;cout << "nsp = " << nsp.get() << endl;return 0;
}
c++智能指针 示例讲解相关推荐
- C++---智能指针原理讲解
为什么需要智能指针 在写代码的时候,从堆上申请的空间,由于一些原因(代码中途异常),没有得到释放,从而导致代码出现内存泄漏,所以为了防止此类问题的出现,从而出现智能指针.采用智能指针可以自动检测,指针 ...
- 智能指针实战讲解--龙之介《Effective C++》实验室
条款13 以对象管理资源 在C++中 我们申请资源(new) 之后需要手动释放资源(delete) Test* t = new Test();//申请资源......delete t;//释放资源 但 ...
- C++智指针之——boost::intrusive_ptr,一种与shared_ptr、unique_ptr截然不同的智能指针
智能指针boost::shared_ptr/std::shared_ptr使用了和数据无关的引用计数,在使用shared_ptr之前,必须要搞清楚资源的所有权和资源的使用权这两个问题(详见<C+ ...
- 智能指针的用法shared_ptr
目录 智能指针 shared_ptr共享的智能指针 shared_ptr的基本用法 1.初始化 reset成员函数 make_shared swap()函数 2. 获取原始指针(get()) 3. 指 ...
- 【C++ 语言】智能指针 引入 ( 内存泄漏 | 智能指针简介 | 简单示例 )
文章目录 I . 智能指针 引入 II . 智能指针 简介 III . 智能指针 简单示例 I . 智能指针 引入 1 . 示例前提 : 定义一个 Student 类 , 之后将该类对象作为智能指针指 ...
- C++ 智能指针 unique_ptr 详解与示例
unique_ptr 是 C++ 11 提供的用于防止内存泄漏的智能指针中的一种实现,独享被管理对象指针所有权的智能指针.unique_ptr对象包装一个原始指针,并负责其生命周期.当该对象被销毁时, ...
- C++智能指针中unique_ptr部分内容的讲解
参考链接 std::unique_ptr 介绍 定义位于头文件<memory> std::unique_ptr 是通过指针占有并管理另一对象,并在 unique_ptr 离开作用域时释放该 ...
- 五点讲述C++智能指针的点点滴滴
(在学习C/C++或者想要学习C/C++可以加我们的学习交流QQ群:712263501群内有相关学习资料) 0.摘要 本文先讲了智能指针存在之前C++面临的窘境,并顺理成章地引出利用RAII技术封装普 ...
- 浅谈auto_ptr智能指针
引入智能指针: 智能指针的实现原理: 资源分配即初始化RAII(Resource Acquisition Is Initialization): 定义一个类来封装资源的分配和释放,在构造函数完成资源的 ...
最新文章
- 混合线性模型+mixed linear model+GEEs+GLMM+LMM
- 通过“四大行为”对WCF的扩展[原理篇]
- 让你受用一辈子的181句话
- android卡片层叠效果_ReactNative之Android绝对布局position:#x27;absolute#x27;问题
- 最近都在谈的「私域流量」,究竟有没有前途?
- js javascript 判断字符串是否包含某字符串,String对象中查找子字符,indexOf
- Java Mysql工具类封装
- 用java设计一个矩形类_6-1 设计一个矩形类Rectangle (10分)
- 使用VMware虚拟机搭建爱快路由器PPPoE服务器环境
- 计算机操作测试题及答案,计算机操作系统期末考试题及答案-
- java8中的Collectors.groupingBy用法
- 搜狗输入法的使用感受与评价
- 饿了么前端教程简明笔记
- 使用PWM信号实现呼吸灯(IDE+Protuse)
- window编译最新的spiderMonkey
- logic pro x 下载
- 专科出身,苦学Android,最终圆梦阿里,2021最新Android框架体系架构面试题
- 数据仓库ETL工具箱——元数据
- 布隆过滤器(亿级数据过滤算法)
- C# Media Player控件(转)
热门文章
- linux shell case语句
- 使用Nessus漏扫
- Windows Socket五种I/O模型——代码全攻略
- Linux程序映像的布局
- 对网上花店系统进行软件测试,网上花店系统
- 特性开关框架 java_关于Mosfet你应当知道的开关特性
- matlab中imresize函数的用法,为何 MATLAB imresize 函数和 OpenCV resize 函数结果不同
- mysql 5.5 5.6差异,MySQL5.5和MySQL5.6授权区别
- 服务器被非法上传文件,DiscuzX没有合法的文件被上传的修复方法
- 二叉搜索树的最近祖先