cc40a_demo_Cpp_智能指针c++_txwtech
//40_21days_Cpp_智能指针c++_cc40a_demo.cpp_txwtech
//智能指针、auto_ptr类
//*常规指针-容易产生内存泄漏,内存被占满,程序就死机,或者系统死机
//*智能指针
//-》自动动手设计智能指针--很难!
//-----深度复制、写时复制、引用计数、引用链接、
//->使用std::auto_ptr智能指针--用在(破坏性复制)-功能简单
//->使用Boost智能指针,学习boost库-----------------重点学习
//->使用ATL框架中的智能指针MFC,VC++中-----------------重点学习
//如CComPtr,CComQIPtr等等。。。
//40_21days_Cpp_智能指针c++_cc40a_demo.cpp_txwtech //智能指针、auto_ptr类
//*常规指针-容易产生内存泄漏,内存被占满,程序就死机,或者系统死机
//*智能指针
//-》自动动手设计智能指针--很难!
//-----深度复制、写时复制、引用计数、引用链接、
//->使用std::auto_ptr智能指针--用在(破坏性复制)-功能简单
//->使用Boost智能指针,学习boost库-----------------重点学习
//->使用ATL框架中的智能指针MFC,VC++中-----------------重点学习
//如CComPtr,CComQIPtr等等。。。
#include <iostream>
//#include <memory> //auto_ptr
#include "smart_point.h"
using namespace std;
class Dog
{ };
//c++没有垃圾回收功能,所有用智能指针去解决这个问题
void demo2()
{
auto_ptr<double> pd(new double);//模板做的一个类,函数结束前,就不用delete
*pd = 28.6;
std::auto_ptr<Dog> pDog(new Dog());
//测试自己做的智能指针smart_point.h/示范,大概的样子,实际不能用
smart_pointer<Dog> spDog(new Dog());//实际不能用
std::cout <<"demo2: "<< *pd << std::endl; }
void demo1()
{
double d;
d = 25.6;
double *pd = new double;//堆上动态分配内存
*pd = 25.6;
std::cout << d << std::endl;
//if (1)
//throw exception();//抛出异常后,无法执行到delete pd指针
delete pd;
return;
} int main()
{
demo1();
demo2();
return ;
}
#include "smart_point.h"
#pragma once
template <typename T>
class smart_pointer
{
//测试自己做的智能指针smart_point.h/示范,大概的样子
private:
T* m_pRawPointer;
public:
smart_pointer(T* pData) :m_pRawPointer(pData) {}
//复制构造函数
smart_pointer(const smart_pointer & anotherSP);
//赋值操作符
smart_pointer& operator=(const smart_pointer & anotherSP);
//间接引用操作符
T& operator*() const
{
return *(m_pRawPointer);
}
T* operator->() const
{
return m_pRawPointer;
}
};
cc40a_demo_Cpp_智能指针c++_txwtech的更多相关文章
- enote笔记法使用范例(2)——指针(1)智能指针
要知道什么是智能指针,首先了解什么称为 “资源分配即初始化” what RAII:RAII—Resource Acquisition Is Initialization,即“资源分配即初始化” 在&l ...
- C++11 shared_ptr 智能指针 的使用,避免内存泄露
多线程程序经常会遇到在某个线程A创建了一个对象,这个对象需要在线程B使用, 在没有shared_ptr时,因为线程A,B结束时间不确定,即在A或B线程先释放这个对象都有可能造成另一个线程崩溃, 所以为 ...
- C++智能指针
引用计数技术及智能指针的简单实现 基础对象类 class Point { public: Point(int xVal = 0, int yVal = 0) : x(xVal), y(yVal) { ...
- EC笔记:第三部分:17、使用独立的语句将newed对象放入智能指针
一般的智能指针都是通过一个普通指针来初始化,所以很容易写出以下的代码: #include <iostream> using namespace std; int func1(){ //返回 ...
- 智能指针shared_ptr的用法
为了解决C++内存泄漏的问题,C++11引入了智能指针(Smart Pointer). 智能指针的原理是,接受一个申请好的内存地址,构造一个保存在栈上的智能指针对象,当程序退出栈的作用域范围后,由于栈 ...
- 智能指针unique_ptr的用法
unique_ptr是独占型的智能指针,它不允许其他的智能指针共享其内部的指针,不允许通过赋值将一个unique_ptr赋值给另一个unique_ptr,如下面错误用法: std::unique_pt ...
- 基于C/S架构的3D对战网络游戏C++框架_05搭建系统开发环境与Boost智能指针、内存池初步了解
本系列博客主要是以对战游戏为背景介绍3D对战网络游戏常用的开发技术以及C++高级编程技巧,有了这些知识,就可以开发出中小型游戏项目或3D工业仿真项目. 笔者将分为以下三个部分向大家介绍(每日更新): ...
- C++ 引用计数技术及智能指针的简单实现
一直以来都对智能指针一知半解,看C++Primer中也讲的不够清晰明白(大概是我功力不够吧).最近花了点时间认真看了智能指针,特地来写这篇文章. 1.智能指针是什么 简单来说,智能指针是一个类,它对普 ...
- C++11智能指针读书笔记;
智能指针是一个类对象,而非一个指针对象. 原始指针:通过new建立的*指针 智能指针:通过智能指针关键字(unique_ptr, shared_ptr ,weak_ptr)建立的指针 它的一种通用实现 ...
随机推荐
- Python每日一练(1)
这两天在做Python的每日一练,感觉收获颇丰,所以来记录分享一下,一共做了三个,涉及socket,PIL,pymysql三个库,另外终于开始了Flask框架的学习,后续也会做出一些分析 第一个是一个 ...
- JBoss 5.x/6.x 反序列化漏洞(CVE-2017-12149)复现
0x00 漏洞介绍 该漏洞为 Java反序列化错误类型,存在于 Jboss 的 HttpInvoker 组件中的 ReadOnlyAccessFilter 过滤器中.该过滤器在没有进行任何安全检查的情 ...
- Black Hat Python之#1:制作简单的nc工具
nc即netcat,是网络界的瑞士军刀.当入侵了一个服务器之后,发现nc工具已经被系统管理员移除之后,可以自己制作一个简单的客户端和服务器端来实现①上传文件②执行命令③开启一个新的命令行shell等几 ...
- 基于Basys2开发板的简易电子琴和音乐播放器设计
背景:华中科技大学 电测综合实验 主要功能:Basys2开发板外接一个扬声器(或无源蜂鸣器也可)实现电子琴和音乐播放器的功能.其中由于开发板上只有4个按键,所以电子琴功能只做了4个音调,分别对应于4个 ...
- Rocket - diplomacy - 模块结构信息
https://mp.weixin.qq.com/s/cTRxXwWNEeb4-XX_t4bRcg 讨论模块结构信息的来源及使用方式. 1. diplomacy diplom ...
- 用python实现汉诺塔问题
一.用动画实现汉诺塔问题: import turtle class Stack: def __init__(self): self.items = [] def isEmpty(self): retu ...
- Java实现 LeetCode 797 所有可能的路径 (DFS)
797. 所有可能的路径 给一个有 n 个结点的有向无环图,找到所有从 0 到 n-1 的路径并输出(不要求按顺序) 二维数组的第 i 个数组中的单元都表示有向图中 i 号结点所能到达的下一些结点(译 ...
- Java实现 LeetCode 719 找出第 k 小的距离对(二分搜索法+二分猜数字)
719. 找出第 k 小的距离对 给定一个整数数组,返回所有数对之间的第 k 个最小距离.一对 (A, B) 的距离被定义为 A 和 B 之间的绝对差值. 示例 1: 输入: nums = [1,3, ...
- Java实现 蓝桥杯VIP 算法训练 二元函数
问题描述 令二元函数f(x,y)=ax+by,a和b为整数,求一个表达式S的值. 只有满足以下要求的表达式才是合法的: 1.任意整数x是一个合法的表达式: 2.如果A和B都是合法的表达式,则f(A,B ...
- Java实现 LeetCode 363 矩形区域不超过 K 的最大数值和
363. 矩形区域不超过 K 的最大数值和 给定一个非空二维矩阵 matrix 和一个整数 k,找到这个矩阵内部不大于 k 的最大矩形和. 示例: 输入: matrix = [[1,0,1],[0,- ...