vector的复制是浅复制,所以复制一个包含动态内存的变量的对象的话就会出问题.解决办法:自己写类的复制构造函数,为新对象的指针开辟新的内存空间。但当vector离开作用域之后,只会把其成员所占的内存删除(即指针),而不会删除指针指向的内存,就会出现内存泄露。解决办法:使用智能指针。 1 #incl...
分类:
其他好文 时间:
2015-06-28 00:02:42
阅读次数:
123
在boost的智能指针中析构时都用到了checked_delete 和checked_array_delete,为什么不简单地delete呢?
在头文件”boost/checked_delete.hpp”定义了两个函数模板,checked_delete 和 checked_array_delete, 以及两个类模板,checked_deleter 和 checked_array_deleter...
分类:
其他好文 时间:
2015-06-27 16:41:07
阅读次数:
108
代码模式
为其他对象提供一种代理以控制对这个对象的访问。
二:代理模式的应用
1) 远程代理,也就是为一个对象在不同的地址空间提供局部代表。这样可以隐藏一个对象存在于不同地址空间的事实。
2)虚拟代理,是根据需要创建开销很大的对象。通过它来存放实例化需要很长时间的真实对象。
3)安全代理,用来控制真实对象访问时的权限。
4)智能指针,是指当调用真实的对象时,代理...
分类:
其他好文 时间:
2015-06-25 09:07:19
阅读次数:
149
以独立语句将newed对象置入智能指针本节我们需要学习的知识核心是注意编译器在同一语句中,调用次序具有不确定性,不同语句中,调用次序确定。
上面的话什么意思?
请看以下代码:int priority();
int processWidget(shared_ptr pw, int priority);
processWidget(shared_prt pw(new...
分类:
编程语言 时间:
2015-06-24 16:22:53
阅读次数:
173
确保容器中的对象拷贝正确而高效在使用STL模板的时候,我们必须想到有关拷贝的问题。如果STL中存储的是我们自定义类型。可能会发生以下几个问题:首先为了避免拷贝过程成为程序运转的瓶颈,我们选择存储自定义的指针。但是,这里容易出现野指针的问题,所以我们需要使用智能指针shared_pre来避免。接着如果存储类型为基类,此时我们存储派生类,则会发生截断现象,即只copy了基类部分,而派生类部分丢失。最后相...
分类:
其他好文 时间:
2015-06-21 22:29:34
阅读次数:
197
#include
using namespace std;template
class auto_ptr_
{
public:
auto_ptr_(Type *t = NULL) :ptr(t), count(new int(1))
{
}
auto_ptr_(const auto_ptr_& at) :ptr(at...
分类:
编程语言 时间:
2015-06-20 18:27:19
阅读次数:
149
#include
using namespace std;template//引用计数的只能指针
class auto_ptr_
{
public:
auto_ptr_(Type *t = NULL):ptr(t), count(1)
{
}
auto_ptr_(const auto_ptr_& at)...
分类:
编程语言 时间:
2015-06-20 09:12:08
阅读次数:
136
关于迭代器的基本介绍可以看我之前泛型编程的文章:
STL的中心思想在于:将数据容器(containers)和算法(algorithms)分开,彼此独立设计,最后再以一帖粘合剂将它们撮合在一起。
迭代器(iterator)是一种 smart pointer,关于智能指针可以看我之前的文章(智能指针)。
迭代器是一种行为类似指针的对象,而指针的各种行为中最常见也最重要的便...
分类:
其他好文 时间:
2015-06-19 15:18:36
阅读次数:
150
Unique pointer:
Manages the storage of a pointer, providing a limited garbage-collection facility, with little to no overhead over built-in pointers (depending on the deleter used).
These obje...
分类:
其他好文 时间:
2015-06-18 22:20:18
阅读次数:
182