简单剖析智能指针的思想

谈到智能指针之前,必须要知道堆栈的相关思想,堆栈在程序开发过程中经常使用到的。比如应用程序的函数当中通过new一个对象,这个对象的实际存储地方是在堆上,而它的指针是保存在栈,在函数执行完毕之后,该对象的指针会被自动从栈中弹出,而其指向的对象会在不会被自动释放,需要通过delete函数来释放该指针所指向的堆栈内存。在开发过程中往往因为忘记delete而造成内存泄露的情况。由此就有智能指针的出现。

智能指针主要思想是:在栈中new一个智能指针对象,而这个智能指针对象指向的实际内容是放在堆上的,在函数执行完成之后,该智能指针对象会被从栈中弹出,此时会调用智能指针的析构函数,在执行该析构函数时,会调用delete函数来释放其指向堆栈上的内存。

时间: 2024-10-21 22:23:20

简单剖析智能指针的思想的相关文章

C++——几种简单的智能指针

最简单的智能指针就是将指针封装在类里,同时将该类的复制与赋值禁用,也就是使该类失去值语义. 实现代码如下: 1 #ifndef SMART_PTR_H 2 #define SMART_PTR_H 3 #include <iostream> 4 5 6 template <typename T> 7 class SmartPtr 8 { 9 public: 10 typedef T value_type; 11 typedef T* pointer; 12 typedef T&

深度剖析智能指针

RALL:资源分配即初始化,定义一个类来封装资源的分配和释放,在构造函数中完成资源的分配和初始化,在析构函数中完成资源的清理. 首先来看这样一个例子: 此例子乍一看上去,new/delete匹配,并没有什么错.但就因为return的存在,使得Test()函数提前结束,并没有执行delete p.这就使得内存泄露. 内存泄露的危害:使得可用内存越来越少,下一次开辟可能不够,程序崩溃. 为解决此类问题,引入智能指针. 所谓的智能指针就是智能/自动化的管理指针所指向的动态资源的释放. 智能指针的行为类

深入剖析智能指针 shared_ptr

在effective C++经常会提到智能指针,这里对shared_ptr进行一个总结: 1 简要介绍用法 智能指针主要是用于资源管理,当申请一个资源的时候为了保证在离开控制流的时候对应资源应该得到相应的释放,这个时候如果资源对应一个类,在构造类的时候进行资源的分配(也就是书中经常提到的Resource Acquisition  Is Initialization RAII),在对象离开作用域的时候调用对应的析构函数资源得到适当的释放 这里有几个智能指针得到应用: auto_ptr: 被销毁的时

简单剖析智能语音交互技术

机器学习和自然语言处理技术的进步为语音与人工智能的交互提供了可能.人们可以通过对话获得信息,并与机器互动,而机器将不再只存在于科幻小说中.语音交互是未来的发展方向.智能扬声器是语音交互着陆的第一代产品. 以市面上面流行的智能电话机器人为例,他的AI模块主要包含了4部分自动语音识别(Automatic Speech Recognition, ASR),自然语言理解(Natural Language Understanding, NLU),自然语言生成(Natural Language Genera

C++智能指针剖析(下)boost::shared_ptr&amp;其他

1. boost::shared_ptr 前面我已经讲解了两个比较简单的智能指针,它们都有各自的优缺点.由于 boost::scoped_ptr 独享所有权,当我们真真需要复制智能指针时,需求便满足不了了,如此我们再引入一个智能指针,专门用于处理复制,参数传递的情况,这便是如下的boost::shared_ptr. boost::shared_ptr 属于 boost 库,定义在 namespace boost 中,包含头文件#include<boost/smart_ptr.hpp> 便可以使

简单的单例类和智能指针

1.一个简单的单例类: class Singleton { public: static Singleton *getInstance() { if(pInstance_ == NULL){ mutex_.lock(); if(pInstance_ == NULL){ sleep(1); pInstance_ = new Singleton; } mutex_.unlock(); } return pInstance_; } private: Singleton(){} static Singl

C++智能指针,指针容器原理及简单实现(auto_ptr,scoped_ptr,ptr_vector).

目录 C++智能指针,指针容器原理及简单实现(auto_ptr,scoped_ptr,ptr_vector). auto_ptr scoped_ptr ptr_vector C++智能指针,指针容器原理及简单实现(auto_ptr,scoped_ptr,ptr_vector). 前言 最近再写一个muduo的异步日志接触了很多智能指针,但是又不打算用boost库,只好模一个来用用了. 智能指针的本质即用栈上对象来管理堆上数据的生命周期. 智能指针本身是一个对象,它在栈上创建,构造的时候分配堆上资

浅谈智能指针的历史包袱

我们学习C++的时候,想必都会听说一个叫智能指针的东西,在初听这个词的时候,我们都难免不被“智能”两个字所吸引,感觉它会比较高级,让人有种忍不住想用一把的冲动. 但事实上,它可能并没有我们所想的那样“智能”.好用,它本质上其实就是一个对象,它去接管了原指针所管理的资源.但这里单单用一个对象就想有“智能”的效果并没有那么容易.在智能指针发展的过程中,出现了Autor_ptr等多种版本的智能指针,但它们都确都或多或少有一些问题存在(相信早期的前辈们会深有感触).但智能指针的使用性却是不可否认的.它在

C++智能指针(3.30)

一.问题引入 关于C++中的new和delete操作符, 我们知道这两个操作符必须成对存在,才能避免内存泄漏. 这一点在学习的时候被认为是常识,然而,在实际编写代码的过程中,却常常很难做到. 下面有3种情况: 1.代码很长. 当需要用到delete的地方离使用与之对应的new操作符距离非常远时,我们很容易忘记delete.当然,这种情况是完全可以避免的. 2.如下面代码: void Test() { int *pi = new int(1); if(1) { return; } delete p