boost::shared_ptr是可以共享所有权的智能指针。下面用例子说明:1 #include 2 #include 3 #include 4 5 using namespace std; 6 7 class Test 8 { 9 public:10 Test()11 {cout p...
分类:
其他好文 时间:
2014-08-08 01:51:05
阅读次数:
306
STL中的set和map是有序容器,使用时如果希望根据自己的需要来设定排序器,通常有一下两种方式。
1.如果容器中直接存储对象的话,那么我们可以在对象类中重载
2.如果存储的不是直接对象的话比如对象的指针(通常为智能指针),这个时候我们就要定义自己的比较器。而比较器的写法一般有两种。
->1.类内重载函数调用运算符的方法。
->2.以函数的方式提供比较器。
对于第一种方法是非...
分类:
其他好文 时间:
2014-08-07 23:14:55
阅读次数:
277
概述:C++中有很多种智能指针,auto_ptr就是其中的一种,该智能指针主要是为了解决“因程序异常退出发生的内存泄漏”这类问题的。
我们先来看下面的问题代码
#include
#include
#include
using namespace std;
//一般指针的处理方式
template
class OldClass
{
public:
OldClass(T a)
{
ptr...
分类:
其他好文 时间:
2014-08-06 22:59:32
阅读次数:
326
为什么要使用友元函数? 在实现类之间数据共享时,减少系统开销,提高效率
如果类A中的函数要访问类B中的成员(例如:智能指针类的实现),那么类A中该函数要是类B的友元函数
为了使其他类的成员函数直接访问该类的私有变量。即:允许外面的类或函数去访问类的私有变量和保护变量,从而使两个类共享同一函数。此时可...
分类:
编程语言 时间:
2014-08-04 13:45:37
阅读次数:
354
现在C++智能指针有无数个实现了,多一个也无所谓。哈。
这个智能指针是专门为cocos2dx 2.2.x定制的。主要是为了方便使用,同时又要遵循现有的cocos2dx的内存管理。特实现这样一个智能指针。在使用的时候不需要考虑retain或release操作,也不需要new或delete操作!
下面是实现代码
//在很多时候,类的成员是CCObject的子对象,为了保证对其正常使用,又要遵循c...
分类:
其他好文 时间:
2014-08-01 13:44:22
阅读次数:
236
C++ 98的 std::auto_ptr已经被彻底遗弃了,取而代之的是unique_ptr、shared_ptr与weak_ptr。大部分时候我们自己手动申请内存方式内存都是没有问题的,问题是如果程序很大了之后,一个复杂的对象,多次拷贝的代价非常高,很多地方都会使用到,只存在一份拷贝显然是最好的,...
分类:
编程语言 时间:
2014-08-01 13:27:51
阅读次数:
384
C++中智能指针可以防止出现野指针、内存泄露等情况,智能指针的类中包含4个函数:构造函数、拷贝构造函数、重载复制操作符、析构函数。构造函数需要对引用计数和指针进行初始化,引用计数初始化为1,拷贝构造函数完成对象之间的拷贝,要注意引用计数的变化和判断两个指针是否指向相同的内存。重载复制操作符,需要判断的情况是左值代表的指针如果引用计数减为0,要释放相应的内存,避免发生内存泄露。析构函数中先判断引用计...
分类:
其他好文 时间:
2014-07-30 01:02:42
阅读次数:
199
C++中的智能指针是用一个类对另一个对象的指针或者引用进行管理,具体对该类的管理可以用包含对象指针以及引用计数的类来记录;一般有两种方式实现:1. 在对象内部记录引用的个数,这需要对象预留引用计数相关的接口2. 用一个单独的资源管理类进行管理,则不需要修改对象下面主要是第二种方法:(参考)http:...
分类:
编程语言 时间:
2014-07-29 21:22:43
阅读次数:
336
今天开始需要分析clang的源码了,LLVM这个开源的project代码写的很不错的,也算是巩固一下C++的一些基础知识了。首先是在llvm/ADT/OwningPtr.h中定义了owningptr智能指针的实现:源码如下: 1 /// OwningPtr smart pointer - Ownin...
分类:
编程语言 时间:
2014-07-25 14:20:31
阅读次数:
897
1.再说智能指针 1.1 为什么要用智能指针?对于一个指针,它指向一个动态分配内存的对象,若同时有多个指针指向该对象,那么当我们delete的时候,就会出现delete 一个无效内存的错误,因为该对象已经被delete过了,所以这就造成了错误。针对这一情况,我们想到,new 和 delete 必须....
分类:
编程语言 时间:
2014-07-23 11:36:26
阅读次数:
308