智能指针类模板(上)——STL中的智能指针
智能指针类模板
智能指针本质上就是一个对象,它可以像原生指针那样来使用。
智能指针的意义
-现代C++开发库中最重要的类模板之一
-C++中自动内存管理的主要手段
-能够在很大程度上避开内存相关的问题
1.内存泄露,在测试阶段很难发现。造成的原因就是申请堆空间中的内存,忘记释放。
2.多次指针释放:一个指针指向了一片堆空间中的内存,这片内存只需要释放一次,如果在代码中不小心释放了多次,后果也是不确定的,有可能程序马上会死掉,有可能程序过一段时间才死掉。
STL中的智能指针auto_ptr
-生命周期结束时,销毁指向的内存空间
-不能指向堆数组,只能指向堆对象(变量)——如果使用堆数组,可以使用上篇博客中的heapArray
-一片堆空间只属于一个智能指针对象
-多个智能指针对象不能指向同一片堆空间
auto_ptr使用初探
#include <iostream>
#include <string>
#include <memory> using namespace std; class Test
{
string m_name;
public:
Test(const char* name)
{
cout << "Test(const char* name)" << endl;
m_name = name;
}
void print()
{
cout << "I'm" << m_name << endl;
}
~Test()
{
cout << "~Test()" << endl;
}
}; int main()
{
auto_ptr<Test> pt(new Test("hello world") );
pt->print();
cout << "pt= " << pt.get() << endl; //pt.get返回指向的堆空间的起始地址 auto_ptr<Test> pt1(pt);
pt1->print();
cout << "pt= " << pt.get() << endl;
cout << "pt1= " << pt1.get() << endl; return ;
}

STL中的其它智能指针
-shared_ptr
带有引用计数机制,支持多个指针对象指向同一片内存
-weak_ptr
配合shared_ptr而引入的一种智能指针
-unique_ptr
一个指针对象指向一片内存空间,不能拷贝构造和赋值
智能指针类模板(上)——STL中的智能指针的更多相关文章
- C++中的智能指针类模板
1,智能指针本质上是一个对象,这个对象可以像原生的指针一样使用,因为智能指 针相关的类通过重载的技术将指针相关的操作符都进行了重载,所以智能指针对象可以像原生指针一样操作,今天学习智能指针类模板,通过 ...
- C++的标准模板库STL中实现的数据结构之链表std::list的分析与使用
摘要 本文主要借助对C++的标准模板库STL中实现的数据结构的学习和使用来加深对数据结构的理解,即联系数据结构的理论分析和详细的应用实现(STL),本文是系列总结的第二篇.主要针对线性表中的链表 ST ...
- C++的标准模板库STL中实现的数据结构之顺序表vector的分析与使用
摘要 本文主要借助对C++的标准模板库STL中实现的数据结构的学习和使用来加深对数据结构的理解.即联系数据结构的理论分析和详细的应用实现(STL),本文是系列总结的第一篇,主要针对线性表中的顺序表(动 ...
- 智能指针类模板(中)——Qt中的智能指针
Qt中的智能指针-QPointer .当其指向的对象被销毁时,它会被自动置空 .析构时不会自动销毁所指向的对象-QSharedPointer .引用计数型智能指针 .可以被自由的拷贝和赋值 .当引用计 ...
- 数组与指针的区别,以及在STL中传递数组/指针
数组和指针在作为实参传入T[] 或T*的形参时没有区别 void f(int pi[]) { cout << sizeof(pi) << endl; } int a[5] = ...
- 实现一个栈类,类似STL中的栈
1.思路讲解 stack集合类是一个简单的堆栈的实现. 这里有两个模板参数,T和size,T用于指定堆栈中的元素类型,my_size用于表示堆栈中项数的最大值. 类中添加方法isempty.isful ...
- C++解析(27):数组、智能指针与单例类模板
0.目录 1.数组类模板 1.1 类模板高效率求和 1.2 数组类模板 1.3 堆数组类模板 2.智能指针类模板 2.1 使用智能指针 2.2 智能指针类模板 3.单例类模板 3.1 实现单例模式 3 ...
- 转载:STL四种智能指针
转载至:https://blog.csdn.net/K346K346/article/details/81478223 STL一共给我们提供了四种智能指针: auto_ptr.unique_ptr.s ...
- C++ 中的智能指针-基础
简介 在现代 C++ 编程中,标准库包含了智能指针(Smart pointers). 智能指针用来确保程序不会出现内存和资源的泄漏,并且是"异常安全"(exception-safe ...
随机推荐
- go语言设计模式之Concurrency workers pool
worker.go package main import ( "fmt" "strings" ) type WorkerLauncher interface ...
- 201871010113-刘兴瑞《面向对象程序设计(java)》第十五周学习总结
项目 内容 这个作业属于哪个课程 <任课教师博客主页链接>https://www.cnblogs.com/nwnu-daizh/ 这个作业的要求在哪里 <作业链接地址>http ...
- AcWing 27. 数值的整数次方
地址 https://www.acwing.com/problem/content/description/26/ 题目描述实现函数double Power(double base, int expo ...
- JavaScriptES6中Map与对象、数组,JSON之间的相互转换
JavaScriptES6中Map与对象.数组,JSON之间的相互转换 https://blog.csdn.net/c__dreamer/article/details/82183130
- yum update 出错
yum update 出错 : mirrors.163.com; Unknown error" Trying other mirror. yum-utils-1.1.31-52.el7.no ...
- [java 基础]反射入门
原文 概况 使用java的反射,可以让我们检查(或者修改)类,接口,字段,方法的特性.当你在编译期不知道他们的名字的时候非常有用. 除此之外,可以使用反射来创建实例,调用方法或者get/set 字段值 ...
- js ajax设置和获取自定义header信息的方法总结
目录 1.js ajax 设置自定义header 1.1 方法一: 1.2 方法二: 2.js ajax 获取请求返回的response的header信息 3.js ajax 跨域请求的情况下获取自定 ...
- docker安装完报错:Failed to start docker.service: Unit docker.service is masked
执行 systemctl start docker 报错 Failed to start docker.service: Unit docker.service is masked. 解决 syste ...
- sql server 随记 -- 月份/日期 查询
月份 SELECT * FROM ( ] ) a UNPIVOT ( xxx ]) ) a2; 日期 SELECT * FROM ( ] )a UNPIVOT( xxx ]) )a2 (存档)
- Z从壹开始前后端分离【 .NET Core2.0/3.0 +Vue2.0 】框架之十 || AOP面向切面编程浅解析:简单日志记录 + 服务切面缓存
本文梯子 本文3.0版本文章 代码已上传Github+Gitee,文末有地址 大神反馈: 零.今天完成的深红色部分 一.AOP 之 实现日志记录(服务层) 1.定义服务接口与实现类 2.在API层中添 ...