c语言智能指针是什么,C ++中的智能指针
原标题:C ++中的智能指针
考虑以下带有普通指针的简单C ++代码。
MyClass *ptr = new MyClass();
ptr->doSomething();
// We must do delete(ptr) to avoid memory leak
使用智能指针,我们可以指示工作方式,我们不需要显式调用delete。智能指针是指针上的包装类,运算符如*和 - >重载。 智能指针类的对象看起来像指针,但可以执行许多事情,正常的指针不能像自动销毁(是的,我们不必显式使用删除),引用计数等等。
我们的想法是创建一个带有指针,析构函数和重载运算符(如*和 - >)的类。由于当对象超出范围时会自动调用析构函数,因此动态分配的内存将自动删除(或者引用计数可以递减)。考虑以下简单的smartPtr类。
#include
using namespace std;
class SmartPtr
{
int *ptr; // Actual pointer
public:
// Constructor: Refer https://www.geeksforgeeks.org/g-fact-93/
// for use of explicit keyword
explicit SmartPtr(int *p = NULL) { ptr = p; }
// Destructor
~SmartPtr() { delete(ptr); }
// Overloading dereferencing operator
int &operator *() { return *ptr; }
};
int main()
{
SmartPtr ptr(new int());
*ptr = 20;
cout << *ptr;
// We don't need to call delete ptr: when the object
// ptr goes out of scope, destructor for it is automatically
// called and destructor does delete ptr.
return 0;
}
输出:
20
我们可以编写一个适用于所有类型的智能指针类吗?
是的,我们可以使用模板编写通用的智能指针类。以下C ++代码演示相同。
#include
using namespace std;
// A generic smart pointer class
template
class SmartPtr
{
T *ptr; // Actual pointer
public:
// Constructor
explicit SmartPtr(T *p = NULL) { ptr = p; }
// Destructor
~SmartPtr() { delete(ptr); }
// Overloading dereferncing operator
T & operator * () { return *ptr; }
// Overloding arrow operator so that members of T can be accessed
// like a pointer (useful if T represents a class or struct or
// union type)
T * operator -> () { return ptr; }
};
int main()
{
SmartPtr ptr(new int());
*ptr = 20;
cout << *ptr;
return 0;
}
输出:
20
智能指针在管理资源时也很有用,例如文件句柄或网络套接字。
C ++库以auto_ptr,unique_ptr,shared_ptr和weak_ptr的形式提供智能指针的实现返回搜狐,查看更多
责任编辑:
c语言智能指针是什么,C ++中的智能指针相关推荐
- c语言设置bufsiz大小,c语言缓冲区有关问题及c++中的this指针
c语言缓冲区问题及c++中的this指针 1.怎么改变c中缓冲区的大小,使用setbuf[stout,buf];改变buf的大小并不能改变缓冲区的大小,而函数 说明中要求把buf大小设置成BUFSIZ ...
- 【C 语言】结构体 ( 结构体中嵌套二级指针 | 为 结构体内的二级指针成员 分配内存 | 释放 结构体内的二级指针成员 内存 )
文章目录 一.结构体中嵌套二级指针 1.结构体中嵌套二级指针 类型声明 2.为 结构体内的二级指针成员 分配内存 3.释放 结构体内的二级指针成员 内存 二.完整代码示例 一.结构体中嵌套二级指针 1 ...
- 【C 语言】结构体 ( 结构体中嵌套一级指针 | 分配内存时先 为结构体分配内存 然后再为指针分配内存 | 释放内存时先释放 指针成员内存 然后再释放结构头内存 )
文章目录 一.结构体中嵌套一级指针 1.声明 结构体类型 2.为 结构体 变量分配内存 ( 分配内存时先 为结构体分配内存 然后再为指针分配内存 ) 3.释放结构体内存 ( 释放内存时先释放 指针成员 ...
- c6011取消对null指针的引用_C++中的野指针及其规避方法
今天在调试程序过程中,用到了一些指针的方法,这里记录一下野指针的概念. 1.概念 野指针,也就是指向不可用内存区域的指针.通常对这种指针进行操作的话,将会使程序发生不可预知的错误. 野指针与空指针(N ...
- c# 中代替指针的功能_C中的功能指针
c# 中代替指针的功能 A function pointer in C is a pointer that points to a function. C语言中的函数指针是指向函数的指针 . The ...
- git 移动分支指针_理解git 中的HEAD指针branch指针
HEAD指针 使用git checkout 来移动HEAD指针,移动的对象可以是分支指针也可以是快照. HEAD指针可以指向快照也可以指向branch.当指向branch时提交后会和branch指针一 ...
- html自定义指针,如何自定义鼠标指针 怎样在wpf中自定义鼠标指针
如何在ppt中自定义鼠标指针的形状? 魔兽世界怎么自定义鼠标指针 在系统 控制面板 里面鼠标属性 指针里面改就可以了 下面有个浏览 可以自定义换图案 怎样在网页中设定一整套自定义的鼠标指针? 麻烦了 ...
- c++中引用及指针详解
这里写目录标题 1.指针 1.1.什么是指针 指针的本质 指针与地址 程序中如何声明指针以及如何使用运算符&和* 1.2.指针有什么作用 指针与函数参数 2.引用 2.1.什么是引用 2.2. ...
- 基于机器视觉的煤中杂物智能分选系统研究
基于机器视觉的煤中杂物智能分选系统研究 王卫东,张康辉 新机器视觉 昨天 新机器视觉 最前沿的机器视觉与计算机视觉技术 206篇原创内容 公众号 原煤在开采过程中经常会混入各类铁器.锚杆.锚索.网片. ...
最新文章
- 使用HttpOnly提升Cookie安全性
- linux内存cached手动释放
- python自动测试p-使用python+requests实现接口自动化测试
- Windows server 2008 远程桌面建立
- 解读main()方法中的String[] args
- 程序、进程以及线程的爱恨情仇
- 搜狗浏览器收藏夹在哪_是时候换个快速安全的浏览器了,这一次它一定不负众望...
- 动物克隆技术应用价值_虽然有了克隆技术为什么要进行克隆呢
- python数据类型和循环控制
- 【Python笔记】使用 re 模块实现正则表达式操作
- Linux 吉祥物30岁了!“出道”30年,你对Linux了解多少?
- 海康摄像头近距离不能对焦模糊问题
- zutuanxue.com-DNS服务器
- epub电子书--目录结构介绍
- 小米8装magisk
- 网络安全系列-三十四: EDR、NDR、XDR 、HIPS、NIPS、NTA、DPI、DFI、南北流量、东西流量:傻傻分不清楚
- 设计模式(21)备忘录模式
- Eversipn STT-MRAM的MJT细胞
- ubuntu 定时重启/关闭进程
- 机器学习 之 Kmeans聚类