- 浏览: 690177 次
- 性别:
- 来自: 西安
文章分类
- 全部博客 (440)
- c++学习笔记 (89)
- 如何适应变化 (1)
- VC常见问题 (7)
- Brew开发12月9日至12月26日 (1)
- 软件架构 (3)
- 自己动手写C语言编译器之文档翻译工作 (1)
- 自己动手写C语言编译器 (6)
- 网站资源 (1)
- 郝彬英文教程 (1)
- 45度斜角地图 (0)
- 35.264等角视图 (0)
- 30等角视图 (1)
- 如何搞opengl (1)
- 卷积。 (1)
- Android解析日记 (5)
- Linux基础教学 (9)
- Android游戏框架 (9)
- Android游戏开发之OpenGL之坐标矩阵 (2)
- Android异常处理 (1)
- 资源网站 (1)
- ARM汇编学习 (1)
- game (0)
- 自己动手实现OpenGL(准备开始!后面有空补充) (3)
- 云计算 (1)
- Android面试题目 (17)
- 深度学习 (1)
- OpenGL实践 (1)
- 神经网络学习-翻译 (4)
最新评论
-
3482561:
Android 面试题目之 线程池 -
daojin:
直接布局。
安卓高手之路之图形系统(6)requestLayout的流程 -
hety163:
没明白楼主所说的最后两段。如果一个相对布局中有多个子view, ...
安卓高手之路之图形系统(6)requestLayout的流程 -
jackuhan:
100篇!!!膜拜
安卓高手之路之 图形系统之 图形框架(1) -
ritterliu:
不错,按照流程把关键代码都贴出来了。谢谢分享
Android输入输出系统之TouchEvent流程
#pragma once namespace WSBoost { template<class T> class shared_ptr { private: typedef int count_type; public: explicit shared_ptr(T * p = 0): px(p) { pn = new count_type(1); } ~shared_ptr() { if(--*pn == 0) { delete px; delete pn; } } shared_ptr(shared_ptr const & r): px(r.px), pn(r.pn) { ++*pn; } shared_ptr & operator=(shared_ptr const & r) { if (this != &r) { pn = r.pn; px = r.px; ++ *pn; } return *this; } private: T * px; count_type * pn; }; }
另外一个版本的CSTring 和 share_ptr
#include "MyStudyFile.h" #include <crtdbg.h> #include <boost/smart_ptr/shared_ptr.hpp> int strlength (const char * str) { const char *eos = str; while( *eos++ ) ; return( eos - str - 1 ); } char * strcapend (char * dst,const char * src) { char * cp = dst; while( *cp )cp++; while( *cp++ = *src++ ) ; return( dst ); } char * __cdecl strcopy(char * dst, const char * src) { char * cp = dst; while( *cp++ = *src++ ); return( dst ); } //共享的实现。 template<class T> class ShareDataImp { typedef T ElementType; private: struct SharedData { SharedData(ElementType* p = NULL):m_p(p), nRef(1) { } void AddRef() { ++ nRef; } void Release() { if (-- nRef == 0) { delete[] m_p; m_p = NULL; } } ElementType* GetPtr() { return m_p; } int GetCount() { return nRef; } private: ElementType* m_p; int nRef; }; public: ShareDataImp(ElementType* pstr = NULL) : m_pData(new SharedData(pstr)) { } ~ShareDataImp() { m_pData->Release(); if (m_pData->GetCount() == 0) { delete m_pData; } m_pData = NULL; } ShareDataImp(const ShareDataImp& _right) : m_pData(_right.m_pData) { m_pData->AddRef(); } //释放对共享数据的所有权。 void ResetAs(ElementType* p) { m_pData->Release(); delete m_pData; m_pData = new SharedData(p); } char* Get() const { return m_pData->GetPtr(); } private: SharedData* m_pData; }; class CString { public: CString(char* pStr) { char* pNewStr = new char[strlength(pStr) + 1]; strcopy(pNewStr, pStr); m_shareData.ResetAs(pNewStr); } ~CString() { } const char* cstr() const { return m_shareData.Get(); } CString& Append(CString& strVal) { CString strRight(strVal.cstr()); m_shareData.ResetAs(CloneData(GetLength() + strVal.GetLength() + 1)); strcapend(cstr(), strRight.cstr()); return *this; } CString& Assign(const CString& strVal) { m_shareData.ResetAs(strVal.CloneData(strVal.GetLength() + 1)); return *this; } CString& Assign(char* pStr) { CString strRight(pStr); m_shareData.ResetAs(strRight.cstr()); return *this; } int GetLength() const { return strlength(m_shareData.Get()); } private: char* cstr() { return m_shareData.Get(); } char* CloneData(int iSize) const { char* pStr = new char[ iSize]; strcopy(pStr, cstr()); return pStr; } ShareDataImp<char> m_shareData; }; int main() { CString* pVal = new CString("1"); CString* pVa2 = new CString(*pVal); CString* pVa3 = new CString(*pVa2); CString* pVa4 = new CString(*pVa3); delete pVal; delete pVa2; delete pVa3; delete pVa4; _CrtDumpMemoryLeaks(); }
发表评论
-
Camera框架初探
2012-12-28 00:26 2665先解释一些概念,然后带着思考去解读 1.CameraServ ... -
打印一个字符串的所有排列。
2011-07-24 18:04 1176//打印一个字符串的所有排列。void printSequen ... -
快速排序
2011-04-16 21:26 951#include <stdio.h> #inclu ... -
ubuntu配置Android指南
2011-04-09 04:46 1455您还未登录!|登录|注册|帮助 CSDN首页资讯论坛博客下载搜 ... -
linux ubuntu mount success
2011-04-05 22:13 4025wangshuai@wangshuai-virtual-ma ... -
ubuntu VMware
2011-04-05 15:00 806http://www.linuxidc.com/Linux/2 ... -
Android源代码获得方法
2011-04-03 19:58 989http://www.williamhua.com/2009/ ... -
什么是页表和页目录
2011-03-27 21:49 13784G内存分解为1M个内存页。 1K个页组成一个页表。 1K个页 ... -
pure abstract class(什么是纯抽象类?)
2011-03-18 22:55 1214下面是C++的创造者的回答,供你参考 Bjarne Stro ... -
自动化Build的方法如下所示
2011-02-05 23:43 1294#本文件自动进行build ... -
批处理
2011-02-04 17:19 1230批处理之家: http://www.bathome.n ... -
CString的高效版本
2011-02-03 17:55 1025#pragma once #include <stri ... -
自己写的share_ptr + Arry 来制作CString共享版本
2011-02-03 01:54 1625#include "MyStudyFile.h&qu ... -
什么叫做坐标系的平移和旋转.
2011-01-16 10:35 3201坐标系是个什么概念呢: X,Y,Z的轴坐标, ... -
总结一下这几天操作符的学习心得
2010-12-11 20:43 9391.关于map的operator[]:原形为 val_type ... -
函数返回应该是个右值吧,为啥能放在左边(红色标示的部分)?
2010-11-17 16:18 12341楼 class A1 { public: A ... -
优点和缺点
2010-11-13 19:52 721优点:非常爱学习,为人很大方。做事很投入,很刻苦。 缺点是: ... -
游戏开发框架
2010-11-09 21:57 1110class m_eventManger { }; c ... -
键盘消息
2010-11-08 20:50 987void CqjgzDlg::OnBnClickedWin ... -
总结一下通信方面的工作
2010-11-06 12:47 9141.网络通信主要包括通信的建立,通信的正常进行,以及断开。以及 ...
相关推荐
在本项目"test_share_ptr"中,我们可以推断其主要关注的是C++中的智能指针`std::shared_ptr`。`std::shared_ptr`是C++标准库中的一个智能指针类型,属于弱所有者(weak ownership)的智能指针,用于管理动态分配的...
采用引用计数的智能指针share_ptr,可以用于标准库容器
shared_ptr boost audio video AVDataPool
shared_ptr基本用法 shared_ptr采用引用计数的方式管理所指向的对象。当有一个新的shared_ptr指向同一个对象时(复制shared_ptr等),引用计数加1。当shared_ptr离开作用域时,引用计数减1。当引用计数为0时,释放所...
shared_ptr在boost中地位... 1、share_ptr是一个类,它产生的是一个类对象,而不是一个原生的指针对象,但是为了减少类对象与针对对象使用的差异性,所以share_ptr类故意重载了两种常见的指针操作符: *和->。从而sha
C++智能指针shared_ptr分析 概要: shared_ptr是c++智能指针中适用场景多,功能实现较多的智能指针。它采取引用计数的方法来实现释放指针所指向的资源。下面是我代码实现的基本功能。 实例代码: template class ...
C++ 中boost::share_ptr智能指针的使用方法 Boost 库的智能指针是 C++ 编程中的一种重要工具,它能够自动管理内存的释放,减少了程序员的负担。其中,boost::shared_ptr 是一种常用的智能指针,它能够使 C++ 的开发...
最近看代码,智能指针用的比较多,自己平时用的少,周末自己总结总结。方便后续使用。 std::shared_ptr大概总结有以下几点: (1) 智能指针主要的用途就是方便资源的管理,自动释放没有指针引用的资源。 (2) 使用引用...
scoped_ptrboost::scoped_ptr和std::auto_ptr非常类似,是一个简单的智能指针,它能够保证在离开作用域后对象被自动释放。下列代码演示了该指针的基本应用: 代码如下:#include <string>#include <iostream>#...
`shared_ptr` 允许多个指针同时拥有对同一对象的所有权,当最后一个`shared_ptr` 被销毁时,对象也会随之被删除。 `shared_ptr` 的基本用法通常涉及以下几个方面: 1. **创建 shared_ptr 实例** - **使用 `make_...
本文基于shared_ptr的源代码,提取了shared_ptr的类图和对象图,然后分析了shared_ptr如何保证文档所宣称的线程安全性。本文的分析基于boost 1.52版本,编译器是VC 2010。 shared_ptr的线程安全性boost官方文档对...
shared_ptr是一种智能指针(smart pointer)。shared_ptr的作用有如同指针,但会记录有多少个shared_ptrs共同指向一个对象。 这便是所谓的引用计数(reference counting)。一旦最后一个这样的指针被销毁,也就是...
在这个“SharePtr”的实现中,可能包含了自定义的智能指针类,它模仿了`std::shared_ptr`的行为,但可能具有特定的增强功能或适应了代理模式的需求。例如,智能指针可能被用作代理类的一部分,以确保在代理生命周期...
我们前面介绍了unique_ptr智能指针,它对它所指向的对象资源具有专属所有权。这个就直接导致unique_ptr是无法进行复制操作的。有没有一种智能指针对象资源不具有专属所有权,也就是它可以进行复制操作。当然有的。那...
C++ 11中最常用的智能指针类型为shared_ptr,它采用引用计数的方法,记录当前内存资源被多少个智能指针引用。该引用计数的内存在堆上分配。当新增一个时引用计数加1,当过期时引用计数减一。只有引用计数为0时,智能...
boost::shared_ptr<test> sharePtr_2 = weakPtr.lock(); if (sharePtr_2) { sharePtr_2->print(); } return 0; } ``` 5. **`shared_array<T>` 和 `scoped_array<T>`** - **定义**:这两种智能指针专门用于...