我们知道c++标准库中定义了智能指针auto_ptr,但是我们很少用它,因为虽然它能够自动回收动态开辟的内存,不需要程序员自己去维护动态开辟的内存,但是当用它去赋值或者是拷贝构造时有一个管理权转移的过程,这样我们就不能很方便的使用auto_ptr。下面是简单的auto_ptr的实现,..
分类:
编程语言 时间:
2016-03-30 18:04:49
阅读次数:
245
#define_CRT_SECURE_NO_WARNINGS
#include<iostream>
usingnamespacestd;
template<classT>
classAuto_ptr
{
public:
Auto_ptr(T*_x):x(_x)
{}
Auto_ptr(Auto_ptr<T>&s):x(s.x)
{
s.x=NULL;
}
Auto_ptr&operator=(Auto_ptr<T>&s)
{
x=s...
分类:
编程语言 时间:
2016-03-26 08:49:48
阅读次数:
263
RAII(ResourceAcquisitionIsInitialization)资源分配即初始化,定义一个类来封装资源的分配和释放,在构造函数完成资源的分配和初始化,在析构函数完成资源的清理,可以保证资源的正确初始化和释放。智能指针:用自动化或者说智能的指针来实现对动态内存的释放。它是一个类,有..
分类:
其他好文 时间:
2016-03-23 23:49:17
阅读次数:
217
auto_ptr与scoped_ptr的实现见本人的上篇博客。三、shared_ptrshared_ptr的实现原理是通过引用计数来实现,只有当引用计数为1时才释放空间,否则只需将引用计数减1.拷贝和赋值将引用计数加1,具体代码如下:template<typenameT>
classSharedPtr
{
public:
SharedPtr();
..
分类:
其他好文 时间:
2016-03-23 23:48:50
阅读次数:
210
最近在补看《C++ Primer Plus》第六版,这的确是本好书,其中关于智能指针的章节解析的非常清晰,一解我以前的多处困惑。C++面试过程中,很多面试官都喜欢问智能指针相关的问题,比如你知道哪些智能指针?shared_ptr的设计原理是什么?如果让你自己设计一个智能指针,你如何完成?等等……。而
分类:
编程语言 时间:
2016-03-22 22:01:54
阅读次数:
252
RAII(ResourceAcquisitionIsInitialization):资源分配即初始化,定义封装一个类,用来实现调用构造函数时就可完成资源的分配和初始化,在调用析构函数就可完成资源的清理,以实现对资源的初始化和清理。智能指针:用自动化或者说智能的指针来实现对动态内存的释放。它是一个类..
分类:
编程语言 时间:
2016-03-21 02:07:36
阅读次数:
509
const int MaxObjectNum = 10; template <typename T> class ObjectPool { template <typename... Args> using Constructor = std::function<std::shared_ptr<T>
分类:
编程语言 时间:
2016-03-12 01:36:35
阅读次数:
755
auto_ptr作为最早的智能指针,可以实现以RAII手法管理堆区对象,但它设计的本意只是简单的利用C++对于栈区对象的自动析构管理堆区对象, 并不像shared_ptr那样包含引用计数,可以在每次拷贝的时候多出一个“分身”。这时候,拷贝的语义就成了很大的问题(按理说直接禁掉可能好好些), 于是就出
分类:
编程语言 时间:
2016-02-28 15:12:29
阅读次数:
169
在并发环境下锁的使用是家常便饭, 如何减少锁的使用是优化程序性能的一个方面. c++11里面新增了智能指针std::shared_ptr, 这个东西也许能给我们带来些启发. shared_ptr的一个特性是当引用计数为0时,它所拥有的堆内存会被自动释放. 利用这个特性我们可以做点实用的功能, 如下程
分类:
其他好文 时间:
2016-02-27 12:19:48
阅读次数:
119
转: http://www.cnblogs.com/TianFang/archive/2008/09/19/1294521.html boost::scoped_ptr虽然简单易用,但它不能共享所有权的特性却大大限制了其使用范围,而boost::shared_ptr可以解决这一局限。顾名思义,boo
分类:
其他好文 时间:
2016-02-22 18:59:56
阅读次数:
120