//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;
}
};

最新文章

  1. 你想要了解但是却羞于发问的有关SSL的一切
  2. 自定义Image自动切换图像控件
  3. 用python生成一个导出数据库的bat脚本文件
  4. postgreSQL的设置自增主键初始值
  5. Window中常见的dos命令
  6. 网卡eth0配置信息
  7. arm裸机驱动错误总结
  8. C#特性
  9. PHP 判断协议是否为HTTPS
  10. aix 扩展文件系统
  11. (3)选择元素——(16)延伸阅读(Further reading)
  12. C++第15周(春)项目3 - OOP版电子词典(一)
  13. java 短信发送例子 tdy
  14. 什么是CTS、CLS和CLR
  15. 王立平--eclipse向svnserver上传项目
  16. 取消svn版本控制
  17. 【WPF】三维模型中的“照相机”
  18. javascript常用开发笔记:一个简单强大的js日期格式化方法
  19. Bugku-CTF之备份是个好习惯
  20. split-brain 脑裂问题(Keepalived)

热门文章

  1. html文本超出加省略号
  2. npm执行清理缓存失败npm cache clean
  3. 0511Object类和异常
  4. 自定义cursor鼠标 图片
  5. [256个管理学理论]005.羊群效应(Herd Behavior)
  6. (Java实现) 洛谷 P1051 谁拿了最多奖学金
  7. Java实现 LeetCode 373 查找和最小的K对数字
  8. Java实现 蓝桥杯VIP 算法训练 ALGO-16进制转换
  9. 第七届蓝桥杯JavaB组国(决)赛部分真题
  10. Java实现蓝桥杯七对数字