- 浏览: 690190 次
- 性别:
- 来自: 西安
文章分类
- 全部博客 (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流程
#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> void SwapFun(T& left, T& right) { T temp = left; left = right; right = temp; } template<class T> class CArry { typedef T ELEMENT_TYPE; public: CArry(const ELEMENT_TYPE* pChar, int nSize) :m_iMaxSize(nSize), m_iCurentSize(nSize) { m_pVChar = new ELEMENT_TYPE[m_iMaxSize]; ELEMENT_TYPE* pStart = m_pVChar; while (nSize --) { *pStart++ = *pChar++; } } CArry(const ELEMENT_TYPE* pChar, int nSize, int nMaxSize) :m_iMaxSize(nMaxSize), m_iCurentSize(nSize) { m_pVChar = new ELEMENT_TYPE[m_iMaxSize]; ELEMENT_TYPE* pStart = m_pVChar; while (nSize --) { *pStart++ = *pChar++; } } CArry& Append(const ELEMENT_TYPE* pChar, int nSize) { if (nSize + m_iCurentSize <= m_iMaxSize) { ELEMENT_TYPE* pStart = m_pVChar+ m_iCurentSize; while(nSize --) { *pStart++ = *pChar++; } } else { CArry(m_pVChar, m_iCurentSize, nSize + m_iCurentSize).Swap(this); Append(pChar, nSize); } } CArry& Assign(const int posAfter, ELEMENT_TYPE* pChar, int nSize) { ELEMENT_TYPE* pStart = m_pVChar + posAfter; while(nSize --) { *pStart++ = *pChar++; } } ~CArry() { delete[] m_pVChar; } operator ELEMENT_TYPE*() { return m_pVChar; } int GetSize() { return m_iCurentSize; } private: void Swap(CArry& other) { SwapFun(m_pVChar, other.m_pVChar) ; SwapFun(m_iMaxSize, other.m_iMaxSize); SwapFun(m_iCurentSize, other.m_iCurentSize); } ELEMENT_TYPE* m_pVChar; int m_iMaxSize; int m_iCurentSize; }; //共享的实现。 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); } ElementType* Get() const { return m_pData->GetPtr(); } private: SharedData* m_pData; }; class CString { public: CString(char* pStr) { CArry<char>* pArry = new CArry<char>(pStr, strlength(pStr) + 1); m_shareData.ResetAs(pArry); } ~CString() { } const char* cstr() const { return *(m_shareData.Get()); } CString& Append(CString& strVal) { CString strRight(strVal.cstr()); m_shareData.ResetAs(CloneData(GetLength() + strRight.GetLength() + 1)); m_shareData.Get()->Assign(GetLength(), strRight.cstr(), strRight.GetLength() + 1); return *this; } CString& Append(char* pChar, int iLength) { m_shareData.ResetAs(CloneData(GetLength() + iLength + 1)); m_shareData.Get()->Assign(GetLength(), pChar, iLength + 1); } CString& Assign(const CString& strVal) { m_shareData.ResetAs(strVal.CloneData(strVal.GetLength() + 1)); return *this; } CString& Assign(char* pStr) { m_shareData.ResetAs(new CArry<char>(pStr, strlength(pStr) + 1)); return *this; } int GetLength() const { return m_shareData.Get()->GetSize() - 1; } private: char* cstr() { return *(m_shareData.Get()); } CArry<char>* CloneData(int iSize) const { return new CArry<char>(cstr(), GetLength() + 1, iSize); } ShareDataImp<CArry<char>> m_shareData; }; int main() { CString* pVal = new CString("121312"); 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 990http://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
2011-02-01 23:43 3091#pragma once namespace WSBoo ... -
什么叫做坐标系的平移和旋转.
2011-01-16 10:35 3202坐标系是个什么概念呢: X,Y,Z的轴坐标, ... -
总结一下这几天操作符的学习心得
2010-12-11 20:43 9401.关于map的operator[]:原形为 val_type ... -
函数返回应该是个右值吧,为啥能放在左边(红色标示的部分)?
2010-11-17 16:18 12351楼 class A1 { public: A ... -
优点和缺点
2010-11-13 19:52 722优点:非常爱学习,为人很大方。做事很投入,很刻苦。 缺点是: ... -
游戏开发框架
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)的智能指针,用于管理动态分配的...
在 C++ 中,有四种智能指针:auto_ptr、unique_ptr、shared_ptr 和 weak_ptr,每种智能指针都有其特点和使用场景。 一、auto_ptr auto_ptr 是 C++98 中引入的智能指针,它可以自动释放动态分配的内存。但是,auto_...
采用引用计数的智能指针share_ptr,可以用于标准库容器
显然,许多人不喜欢标准std :: enable_... boost库也可以这样做,但是它不允许在析构函数中创建shared_ptrs,并且它不提供release()方法来获取所包含指针的所有权。 但是,不利的一面是,它还没有成为线程安全的。
在`VS2015_CV_Demo`这个压缩包中,可能包含了一个使用`shared_ptr`的示例项目,你可以通过编译运行来观察`shared_ptr`如何工作。示例可能涉及到如何创建、传递和释放`shared_ptr`,以及在多线程环境中如何正确地使用...
标题中的“自己实现的auto_ptr”指的是用户自行编写的一个智能指针类,模仿了C++标准库中的`std::auto_ptr`。`std::auto_ptr`是C++标准库中的一个智能指针,用于管理动态分配的对象,它会在适当的时候自动删除所指向...
`_com_ptr_t`是Microsoft Visual C++运行库提供的一种智能指针,专为简化COM接口的使用而设计。 `_com_ptr_t`类模板封装了COM接口指针,并自动处理`AddRef`、`Release`和`QueryInterface`等方法的调用,这些是COM...
C++ 智能指针(shared_ptr/weak_ptr)源码 源码位置:gcc-6.1.0\gcc-6.1.0\libstdc++-v3\include\tr1 这里只单列shared_ptr.h文件用于分析
在某些情况下,可能由于库的限制或者特定环境不支持Boost或C++11及更高版本,导致无法使用标准库中的`std::shared_ptr`和`std::unique_ptr`。在这种场景下,就需要实现自己的智能指针,以达到类似的效果。标题所提及...
`shared_ptr`适合需要多个智能指针共享同一对象的情况,`unique_ptr`适用于独占所有权的资源管理,而`weak_ptr`则解决了循环引用的问题。了解并正确使用这些智能指针,是提升C++编程质量的关键。
尽管在C++11及以后版本中引入了更强大的智能指针如`unique_ptr`和`shared_ptr`,但了解`auto_ptr`的基本概念和用法对于理解智能指针仍然非常重要。 #### `auto_ptr`的概念与作用 `auto_ptr`主要用来管理动态分配的...
6. **内存管理**:C++允许直接操作内存,包括动态内存分配(new、delete)和智能指针(如unique_ptr、shared_ptr、weak_ptr),以避免内存泄漏和悬挂指针问题。 7. **C++11及以后的新特性**:自C++11以来,C++引入...
shared_ptr boost audio video AVDataPool
该文档是C++ auto_ptr源码,感兴趣的可以自行下载学习,方便大家学习参考。
其中,`unique_ptr`是一种特殊的智能指针,它拥有对所指向内存的唯一所有权,不允许与其他`unique_ptr`共享所有权。 `unique_ptr`的特性主要体现在以下几个方面: 1. **唯一所有权**:每个`unique_ptr`实例独占其...
在C++11及更高版本中,智能指针(如`std::unique_ptr`,`std::shared_ptr`和`std::scoped_ptr`)被引入来更好地管理动态内存,因此理解如何在这些指针上实现序列化至关重要。 首先,让我们关注`std::unique_ptr`。`...
《_com_ptr_t对象的远程实例化探讨》 在IT领域,尤其是Windows应用程序开发中,COM(Component Object Model)技术是构建组件和对象之间交互的关键。_com_ptr_t是Microsoft的ATL(Active Template Library)中提供...
标题与描述均提到“auto_ptr再回忆”,暗示文章将通过一个故事的形式,回顾与探讨C++中`auto_ptr`的使用及其潜在问题。`auto_ptr`是C++标准库中的一个智能指针类,用于自动管理动态分配的资源,当`auto_ptr`对象超出...