首页
Python
Java
IOS
Andorid
NodeJS
JavaScript
HTML5
c 不是shared_ptr的成员
2024-08-17
C++ 11 智能指针(shared_ptr)类成员函数详解
C++ 11 模板库的 <memory> 头文件中定义的智能指针,即 shared_ptr 模板类,用来管理指针的存储,提供有限的内存回收函数,可同时与其他对象共享该管理功能. shared_ptr 类型的对象能够获得指针的所有权并共享该所有权:一旦他们获得所有权,指针的所有者组就会在最后一个释放该所有权时负责删除该指针. shared_ptr 对象一旦它们自己被销毁,或者它们的值因赋值操作或显式调用 shared_ptr::reset 而改变时,就会释放它们共同拥有的对象的所有权.一旦通过指
boost库在工作(33)网络服务端之三
在这个例子里,表示服务器与一个客户端的沟通渠道,就是一个连接,封装为类CConnect.它是当服务器接收到一个客户端连接请求之后创建的,主要用来就是管理这个连接的生命周期,以及数据的接收和发送.从生命周期上来说,当一个连接创建时就旦生了,那什么时候死亡呢?在这个类的设计上是非常优秀,非常巧妙的,因为它不会为多生存一点时间而存在,也不会提前死掉而导致非法的内存访问.有这样的特性,主要是得益于它继承类enable_shared_from_this< CConnect >,这个类enable_sha
读书笔记 effective c++ Item 14 对资源管理类的拷贝行为要谨慎
1. 自己实现一个资源管理类 Item 13中介绍了 “资源获取之时也是初始化之时(RAII)”的概念,这个概念被当作资源管理类的“脊柱“,也描述了auto_ptr和tr1::shared_ptr是如何用堆资源来表现这个概念的.然而并不是所有资源都是在堆上创建的,对于这种资源,像auto_ptr和tr1::shared_ptr这样的智能指针就不适合当作资源句柄(handle)来使用了.你会发现你时不时的就会需要创建自己的资源管理类. 举个例子,假设你正在使用C API来操纵Mutex类型的互斥信
enable_shared_from_this类的作用和实现
使用举例 实际中, 经常需要在一个被shared_ptr管理的对象的内部获取自己的shared_ptr. 比如: 通过this指针来构造一个shared_ptr, 如下: struct Bad { void fun() { shared_ptr<Bad> sp{this}; cout<<sp->count()<<endl; } }; shared_ptr<Bad> sp{make_shared<Bad>()}; sp->fun();
boost--signal
1.signals2库 signals2库实现了线程安全的观察者模式,在signals2中观察者模式被称为信号/插槽(signals/slots),它是一种函数回调机制.一个信号可以关联一个或多个插槽,当信号发出时,所有关联它的插槽都会被调用. signals2位于名字空间boost::signals2,使用需要包含头文件"boost/signals2.hpp",而且在VC下编译signals2时,应该在stdafx.h中加入预声明#define _SCL_SECURE_NO_WARN
C++并发编程 等待与唤醒
C++并发编程 等待与唤醒 条件变量 条件变量, 包括(std::condition_variable 和 std::condition_variable_any) 定义在 condition_variable 头文件中, 它们都需要与互斥量(作为同步工具)一起才能工作. std::condition_variable 允许阻塞一个线程, 直到条件达成. 成员函数 void wait(std::unique_lock<std::mutex>& lock); 等待, 通过 notify_
你说你会C++? —— 智能指针
智能指针的设计初衷是: C++中没有提供自己主动回收内存的机制,每次new对象之后都须要手动delete.稍不注意就memory leak. 智能指针能够解决上面遇到的问题. C++中常见的智能指针包含(共七种): std::auto_ptr boost::scoped_ptr boost::shared_ptr boost::intrusive_ptr boost::scoped_array boost::shared_ar
【c++ Prime 学习笔记】第16章 模板与泛型编程
面向对象编程(OOP)和泛型编程(GP)都能处理在编写程序时类型未知的情况 OOP能处理运行时获取类型的情况 GP能处理编译期可获取类型的情况 标准库的容器.迭代器.算法都是泛型编程 编写泛型程序时独立于任何类型,使用泛型程序时提供类型,程序实例在该类型上运行 模板是泛型编程的基础.一个模板是一个创建类/函数的蓝图,使用泛型类型/泛型函数时,提供信息将蓝图转换为特定的类/函数,该转换发生在编译期. 16.1 定义模板 16.1.1 函数模板 可定义一个通用的函数模板来处理参数为多种类型的情形,而
shared_ptr和多线程
前一篇文章写得实在太挫,重新来一篇. 多线程环境下生命周期的管理 多线程环境下,跨线程对象的生命周期管理会有什么挑战?我们拿生产者消费者模型来讨论这个问题. 实现一个简单的用于生产者消费者模型的队列 生产者消费者模型的基本结构如下图所示: 如果我们要实现这个队列该怎么写?首先我们先简单挖掘下这个队列的一些基本需求. 显而易见,这个队列需要支持多线程并发读写. 我们知道,多线程并发读写同一个对象,需要对读写操作进行同步以避免data race[1].在C++11里,我们可以借助mutex. 另外当
shared_ptr 和 unique_ptr
c++11标准废除乐auto_ptr, C++ 标准库智能指针 使用这些智能指针作为将指针封装为纯旧 C++ 对象 (POCO) 的首选项. unique_ptr 只允许基础指针的一个所有者. 除非你确信需要 shared_ptr,否则请将该指针用作 POCO 的默认选项. 可以移到新所有者,但不会复制或共享. 替换已弃用的auto_ptr. 与 boost::scoped_ptr 比较. unique_ptr 小巧高效:大小等同于一个指针且支持 rvalue 引用,从而可实现快速插入和对 ST
c++ shared_ptr 使用注意事项. 1
条款1:不要把一个原生指针给多个shared_ptr管理 int* ptr = new int; shared_ptr<int> p1(ptr); shared_ptr<int> p2(ptr); //logic error ptr对象被删除了2次 这种问题比喻成“二龙治水”,在原生指针中也同样可能发生. 条款2:不要把this指针给shared_ptr class Test{ public: void Do(){ m_member_sp = shared_ptr<Tes
读书笔记_Effective_C++_条款四十五:运用成员函数模板接受所有兼容类型
比如有一个Base类和一个Derived类,像下面这样: class BaseClass {…}; class DerivedClass : public BaseClass {…}; 因为是父类与子类的关系,所以可以这样写: DerivedClass *d; BaseClass *b = static_cast< BaseClass *>d; // 用C风格直接是 b = (BaseClass*) d; 我们可以弄一个简易的Shared型智能指针类,如果直接像下面这样写: template
标准库shared_ptr智能指针的实现
目前测试功能正常.若有不完善的地方在改进吧.时候不早了睡觉去,哎,翘课会被抓,不冒险了.晚安全世界O(∩_∩)O /************************************************************************* *my shared_ptr: share_ptr *author:ERIC *blog:http://www.ilovecpp.com *time:2015-5-28 01:36:43 ************************
C++ Primer : 第十二章 : 动态内存之shared_ptr与new的结合使用、智能指针异常
shared_ptr和new结合使用 一个shared_ptr默认初始化为一个空指针.我们也可以使用new返回的指针来初始化一个shared_ptr: shared_ptr<double> p1; shared_ptr<int> p2(new int(42)); // p2指向一个值为42的int 接受指针参数的智能指针构造函数是explicit的,因此,我们不能将一个内置指针隐式的转换为一个智能指针,必须使用直接初始化形式: shared_ptr<int> p1 =
学习笔记:shared_ptr陷阱
条款1:不要把一个原生指针给多个shared_ptr管理 int* ptr = new int; shared_ptr<int> p1(ptr); shared_ptr<int> p2(ptr); //logic error ptr对象被删除了2次 这种问题比喻成“二龙治水”,在原生指针中也同样可能发生. 条款2:不要把this指针给shared_ptr class Test{ public: void Do(){ m_sp = shared_ptr<Test
【STL学习】智能指针之shared_ptr
前面已经学习过auto_ptr,这里补充另外一种智能指针,比auto_ptr要更强力更通用的shared_ptr. shared_ptr 简介及使用选择 几乎所有的程序都需要某种形式的引用计数智能指针,这种指针让我们不再需要为两个对象或更多对象共享的对象的生命周期而编写复杂的逻辑(写起来有点绕口),当被共享的对象引用计数降为0时,被共享对象被自动析构. 引用计数指针分为插入式(instrusive)和非插入式(non-instrusive)两种.前者要求它所管理的类提供明确的函数或数据成员用于
晓说智能指针shared_ptr为何可以实现跨模块分配和释放内存
最近做项目, 有个地方是外包人员写的, 其中有个函数,大致这样 void getInfo(std::shared_ptr<Info>& outInfo); 这个函数是一个dll(链接静态vc库, 使用/MT链接选项). 我在exe(也是/MT选项)中使用这个函数, 一开始看了,感觉危险,为啥呢?因为我是这样调用的 f() { std::shared_ptr<Info> tmpInfo; getInfo(tmpInfo); } 所以,内存是在dll里面分配的,但是 内存在f退
shared_ptr智能指针源码剖析
(shared_ptr)的引用计数本身是安全且无锁的,但对象的读写则不是,因为 shared_ptr 有两个数据成员,读写操作不能原子化.根据文档 (http://www.boost.org/doc/libs/release/libs/smart_ptr/shared_ptr.htm#ThreadSafety)shared_ptr 的线程安全级别和内建类型.标准库容器.std::string 一样,即: 一个 shared_ptr 对象实体可被多个线程同时读取: 两个的 shared_ptr 实
Boost源代码学习---shared_ptr.hpp
最近观看Boost库源代码.Boost功能强大的库,但它的许多源代码,十一细读太费时间,毕竟,还有其他东西要学.所以我决定脱脂感兴趣的章节,他们的设计思路和难以理解的地方记录. shared_ptr是Boost里面最有价值的的智能指针. 它封装了一个原生态指针和一个引用计数器,这个引用计数器是一个类shared_count.shared_ptr支持比較运算,重载了operator<,因此其能够用于set和map. 在转换shared_ptr指针时.用***_pointer_cast定义的函数来转
Effective C++:条款28:避免返回 handles 指向对象内部成员
(一) 有时候为了让一个对象尽量小,能够把数据放在另外一个辅助的struct中,然后再让一个类去指向它.看以下的代码: class Point { public: Point(int x, int y); void setX(int newVal); void setY(int newVal); }; struct RectData { Point ulhc; Point lrhc; }; class Rectangle { public: Point& upperLeft() const {
热门专题
罗克韦尔DMK是什么文件
springboot modelAndView 汉字 乱码
java调用PageOffice生成word
vue label使用空格占位符nbsp
AOP execution 入参
使用stack判断括号匹配
matlab中scatter3函数用法
js 赋值后改变数据会改变list中的数据嘛
Centos7.6安装socks5代理服务器
logback-spring日志保留几条
约创建线过程中可以预配吗
autojs滑块拼合
springboot mybatis sql日志填充参数
YYAnimatedImageView 加载png
ConstraintValidator报错啥子
微软 手机远程协助控制
django 下拉框二级联动
Jtree 滚动到选中节点位置
Java jackson 会依赖 xstream.jar
sqlserver 断开数据库连接sql语句