- 浏览: 763638 次
- 性别:
- 来自: 深圳
文章分类
- 全部博客 (1045)
- 数据结构 (36)
- UML与设计模式 (42)
- c++ (87)
- rust (36)
- Qt (41)
- boost模板元编程 (43)
- Linux (77)
- 汇编 (4)
- 其它 (2)
- 烹饪 (3)
- unix c / socket (73)
- 软件工程 (4)
- shell (53)
- Python (37)
- c++ primer 5th(c++11) (22)
- 数据库/MySQL (27)
- 数据存储 (4)
- lisp (7)
- git (4)
- Utility (3)
- CDN与DNS (54)
- Http (53)
- php (7)
- nginx/lua/openresty (41)
- redis (11)
- TCP/IP (16)
- 互联网 (6)
- kernel (2)
- go (34)
- 区块链 (43)
- 比特股 (13)
- 以太坊 (23)
- 比特币 (23)
- 密码学 (10)
- EOS (53)
- DAG (1)
- docker (1)
- filecoin (7)
- solidity (65)
- ipfs (8)
- 零知识证明 (1)
- openzeppelin (3)
- java (1)
- defi (7)
- Ton (0)
最新评论
为啥想学boost呢,因为它名气大?其实主要还是因为工作中有不要地方用到了不少智能指针,bind等一些东西,想直接完全理解起来还有点难。
boost.smart_ptr库提供了六种智能指针,包括scoped_ptr,scoped_array,shared_ptr,shared_array,weak_ptr和instrusive_ptr,来增强std::auto_ptr,而且是异常安全的。它们都很轻量,速度和原始指针差不多,但是类型T有一个要求:类型T的析构函数不能抛出异常,析构函数最好不要抛出异常不是被很多大牛重申了N次了吗?
原因是:1.能够在异常转递的堆栈辗转开解(stack-unwinding)的过程中,防止terminate被调用。2.它能帮助确保析构函数总能完成我们希望它做的所有事情。
独占与共享:
holder类型独占一个对象
trule可以使对象的拥有者从一个holder传递给另一个holder
boost.smart_ptr库提供了六种智能指针,包括scoped_ptr,scoped_array,shared_ptr,shared_array,weak_ptr和instrusive_ptr,来增强std::auto_ptr,而且是异常安全的。它们都很轻量,速度和原始指针差不多,但是类型T有一个要求:类型T的析构函数不能抛出异常,析构函数最好不要抛出异常不是被很多大牛重申了N次了吗?
原因是:1.能够在异常转递的堆栈辗转开解(stack-unwinding)的过程中,防止terminate被调用。2.它能帮助确保析构函数总能完成我们希望它做的所有事情。
独占与共享:
holder类型独占一个对象
template<typename T> class Holder{ private: T* ptr; public: Holder():ptr(0){ } explicit Holder(T* p):ptr(p){ } ~Holder(){ delete ptr; } //针对新指针的赋值运算符 Holder<T>& operator=(T* p){ delete ptr; ptr = p; return *this; } T& operator*()const{ return *ptr; } T* operator->()const{ return ptr; } T* get()const{ return ptr; } void release(){ ptr = 0; } void exchange_with(Holder<T>& h){ swap(ptr,h.ptr); } void exchange_with(T*& p){ swap(ptr,p); } private: //不向外提供拷贝构造函数和拷贝赋值运算符 Holder (Holder<T> const&); Holder<T>& operator=(Holder<T> const&); };
trule可以使对象的拥有者从一个holder传递给另一个holder
#ifndef TRULE_H #define TRULE_H template<typename T> class Holder; template<typename T> class Trule{ private: T* ptr; public: Trule(Holder<T>& h){ ptr = h.get(); h.release(); } Trule(Trule<T> const& t){ ptr = t.ptr; const_cast<Trule<T>&>(t).ptr = 0; } ~Trule(){ delete ptr; } private: Trule(Trule<T>&); Trule<T>& operator=(Trule<T>&); friend class Holder<T>; }; #endif // TRULE_H
发表评论
-
multi_index_container
2018-08-11 13:04 458根据不同的类中不同的字段排序 #include < ... -
program_options读命令行和配置文件
2018-07-27 11:30 867#include <boost/program_opti ... -
centos下boost安装
2014-03-27 09:28 1061./booststarp.sh //这里的一些错误不用管 ... -
GC的改良
2013-10-17 22:05 577分代回收:对分配不久,诞生时间较短的“年龄”对象进行重点扫描, ... -
GC与引用记数
2013-10-16 21:57 696根(Root)就是判断对象是否可被引用的起始点。至于哪里才是根 ... -
boost 信号槽
2011-06-08 23:43 2321#include<boost/signals2.hp ... -
boost bind
2011-06-07 15:28 1689bind并不是一个单独的类或函数,而是非常庞大的家族,依据绑定 ... -
boost reference_wrapper
2011-06-05 21:07 1564reference_wrapper是一个引用类型的包装器 ... -
元编程
2011-06-02 22:46 933元编程的最大特点在于:某些用户自定义的计算可以在程序翻译期进行 ... -
参数化虚拟性
2011-06-02 22:17 865#include<iostream> usi ... -
boost any与variant
2011-05-31 15:55 2430any:是一种只能容纳一个元素的容器,但这个元素可以是任意类型 ... -
traits
2011-05-30 16:43 792#include<iostream> usi ... -
动静多态
2011-05-30 15:40 1065由于继承||虚函数在运行期进程处理,这种多态叫动多态。 模板允 ... -
局部特化
2011-05-29 16:27 1034局部特化并不会引入一个新的模板,它只对原来模板(基本模板)进行 ... -
类模板与模板类
2011-05-29 16:08 7071.类模板:该类是一个模板,他代表的是:整个类家族的参数化描述 ... -
boost tuple
2011-05-27 15:03 1088tuple(元组):定义了一个有固定数目元素的容器,其中的每个 ... -
boost array
2011-05-27 00:06 932array本质上是一个对静态数组的包装,没有构造函数,不能指定 ... -
单元测试
2011-05-23 22:00 889test库提供了一个最小化的测试套件minimal test. ... -
boost StaticAssert
2011-05-23 21:42 938static_assert库把断言的诊断时刻由运行期提前到编译 ... -
boost正则表达式
2011-05-17 23:10 2800xpressive是boost的正则表达式库,它比boost. ...
相关推荐
本篇文章收集了近一年来所有关于智能指针的面试相关内容。以智能指针的面试题线索,穿插讲解完最常用的四种智能指针的各个方面。本文讲解4个智能指针的基本概念和特性,以及其他设计到的知识点。讲解的过程中,如果...
STL 中的智能指针 智能指针是一种特殊的指针,它可以自动管理内存,避免手动 delete 导致的内存泄露问题。在 STL 中,有多种智能指针,每种都有其特点和用途。本文将详细介绍 STL 中的智能指针,包括 std::auto_ptr...
智能指针是C++编程中一个非常重要的工具,它在管理动态分配的内存时提供了自动释放的功能,大大降低了内存泄漏的风险。然而,如果不正确地使用智能指针,反而可能导致一些严重的问题,例如悬挂指针、内存泄漏或者...
智能指针是C++编程中一个非常重要的概念,它是一种自动管理内存的对象,用来封装原始指针,确保在适当的时候释放所指向的对象。在C++中,智能指针的主要作用是防止内存泄漏,通过自动地跟踪和管理对象的生命周期来...
智能指针是C++编程中一个非常重要的概念,它是一种对象,封装了原始指针,并在需要时自动管理所指向的对象的生命周期。智能指针的主要目的是解决C++中的内存管理和资源管理问题,防止因手动释放内存导致的内存泄漏...
C++智能指针的创建 C++中的指针是很麻烦的,难以管理和释放内存。为了减少问题的出现,现在有很多技巧去减少问题的出现。智能指针是其中一种解决方案。 智能指针是一种特殊的类,它可以模拟指针的行为,但同时也...
C++ 7种智能指针测试代码
智能指针是C++编程中一个非常重要的概念,它是一种对象,可以自动管理其所指向的动态内存资源。在C++中,智能指针通过实现RAII(Resource Acquisition Is Initialization)原则,来确保内存的自动释放,从而避免了...
《C++智能指针——unique_ptr智能指针详解》 智能指针是C++中用于自动管理动态分配内存的一种工具,它可以确保在适当的时候自动释放内存,从而避免内存泄漏的问题。其中,`unique_ptr`是一种特殊的智能指针,它拥有...
智能指针相信大家听说过吧,我理解的智能指针,既是一个C++模板类,重载了指针操作符(->)和(*)操作符,而使它的实例可以"用指针的形式去调用"。 它可以接管任意类型的指针,所以你只需要放心大胆的new出任意对象...
"c++句柄、智能指针和指针的区别" 在C++编程中,句柄、智能指针和指针是三个相关但不同的概念。理解它们之间的区别对于初学者来说非常重要。 首先,让我们来讨论指针和句柄的区别。指针是指向物理内存地址的指针...
在C++编程中,智能指针是一种特殊类型的对象,它表现得像常规指针,但自动管理所指向的对象的生命周期。智能指针的核心目标是防止内存泄漏,这是C++编程中一个常见的问题,尤其是在处理动态分配的内存时。内存泄漏指...
智能指针是用来实现指针指向的对象的共享的。其实现的基本思想: 每次创建类的新对象时,初始化指针并将引用计数置为1; 当对象作为另一对象的副本而创建时,拷贝构造函数拷贝指针并增加与之相应的引用计数; 对一个...
### C++中智能指针的设计和使用 #### 智能指针概述 在C++中,智能指针是一类特殊的设计模式,旨在通过模仿原始指针的行为来提供额外的安全性和资源管理机制。它们通常用来解决传统指针所带来的内存泄漏问题和其他...
智能指针是存储指向动态分配(堆)对象指针的类, 用于生存期控制, 能够确保自动正确的销毁动态分配的对象,防止内存泄露。它的一种通用实现技术是使用引用计数(reference count)。智能指针类将一个计数器与类指向的...
### Chromium中的智能指针实现分析 #### 一、引言 在C++编程语言中,内存管理是一项重要的任务。为了防止资源泄露或悬挂指针等问题的发生,开发者们常常需要手动管理对象的创建与销毁。然而,这样的做法不仅繁琐...