概述:C++中有很多种智能指针,auto_ptr就是其中的一种,该智能指针主要是为了解决“因程序异常退出发生的内存泄漏”这类问题的。
我们先来看下面的问题代码
#include
#include
#include
using namespace std;
//一般指针的处理方式
template
class OldClass
{
public:
OldClass(T a)
{
ptr...
分类:
其他好文 时间:
2014-08-06 22:59:32
阅读次数:
326
我今天在想这个vector,map为什么不能写入共享内存,原来是因为new的时候只是new了这个对象在共享内存上,而真正的堆上的内存并没有在共享内存里面的,如果要想vector可以共享就要重写分配器或者用boost的,看了我们那个结构体还是很复杂的,肯定不适用,看来只有改成数组,对于string为什...
分类:
其他好文 时间:
2014-08-06 01:34:30
阅读次数:
252
当我们声明和定义一个模板的时候,必须要让声明和定义放在一个文件里。否则编译器会报错。这就是为什么boost的实现文件的后缀名是hpp了。这其中的理由是什么呢?为什么会这样?首先,一个编译单元(translation unit)是指一个.cpp文件以及它所#include的所有.h文件,.h文件里的代...
分类:
编程语言 时间:
2014-08-05 22:10:20
阅读次数:
209
最近想整一个日志库,以前使用过log4cplus,看到了boost推出了1.54版本之后,就开始有了一个log库。这个log看了介绍,之后开始尝试去使用。主要的应用场景是让多个模块(so,dll)使用。场景是一个程序,多个...
分类:
其他好文 时间:
2014-08-05 19:42:00
阅读次数:
1026
最近开了boost库的学习,就先从日期时间库开始吧,boost的date_time库是一个很强大的时间库,用起来还是挺方便的。以下算是我学习的笔记,我把它记录下来,以后便于我复习和查阅。#include#include#includeusing namespace std;using namespa...
分类:
其他好文 时间:
2014-08-05 00:11:59
阅读次数:
388
为什么要使用友元函数? 在实现类之间数据共享时,减少系统开销,提高效率
如果类A中的函数要访问类B中的成员(例如:智能指针类的实现),那么类A中该函数要是类B的友元函数
为了使其他类的成员函数直接访问该类的私有变量。即:允许外面的类或函数去访问类的私有变量和保护变量,从而使两个类共享同一函数。此时可...
分类:
编程语言 时间:
2014-08-04 13:45:37
阅读次数:
354
很多情况下都会用到boost库,之前可能通过boostpro直接下载编译好的二进制库,不过遗憾的是目前不再可用了。下面给出手动编译的过程说明,以版本1.44为例进行说明;第一步,执行bootstrap.bat,将会在同目录下生成bjam.exe.后面的编译将依赖于bjam.exe注:bjam.exe...
现在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