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