如下的代码,虽然使用了智能指针 shared_ptr , 但是还是可能泄漏资源。
processWidget(shared_ptr(new Widget), priority());
上述函数有两个参数,第一个是 shared_ptr, 第二个是纯粹是 priority()函数的调用。
调用时,编译器必须创建代码,包括如下三件事情:
调用 priority执行 new Widg...
分类:
其他好文 时间:
2014-07-02 07:01:57
阅读次数:
180
前面已经学习过auto_ptr,这里补充另外一种智能指针,比auto_ptr要更强力更通用的shared_ptr。 shared_ptr 简介及使用选择 几乎所有的程序都需要某种形式的引用计数智能指针,这种指针让我们不再需要为两个对象或更多对象共享的对象的生命周期而编写复杂的逻辑(写起来有点绕口)....
分类:
其他好文 时间:
2014-07-01 13:25:27
阅读次数:
217
原始指针:通过new建立的*指针智能指针:通过智能指针关键字(unique_ptr, shared_ptr ,weak_ptr)建立的指针在现代 C++ 编程中,标准库包含智能指针,该指针用于确保程序不存在内存和资源泄漏且是异常安全的。在现代 C++ 中,原始指针仅用于范围有限的小代码块、循环或者性...
分类:
编程语言 时间:
2014-06-30 13:49:42
阅读次数:
354
在实际产品运行中,对连接管理有了更新的认识,这里分享一下。shared_ptr管理连接对象的生命周期shared_ptr的引用计数器决定了连接对象的生命周期。这里我说的连接对象就是在我的前文:http://blog.csdn.net/csfreebird/article/details/852262...
分类:
其他好文 时间:
2014-06-23 08:26:05
阅读次数:
348
(一)
上一条款说的auto_ptr和tr1::share_ptr适合于heap-based的资源,然而并不是所有资源都是heap-based的。换句话说并不是tr1::shared_ptr 和 auto_ptr 永远适合做为资源的管理者。所以有时难免还是需要实现自己的资源管理类型。
假设Mutex类型通过lock和unlock两组函数进行互斥器的锁定和解锁,可能我们希望和auto_ptr一样...
分类:
编程语言 时间:
2014-06-19 10:22:06
阅读次数:
302
一.boost::thread的创建 1.线程创建方法一: boost::shared_ptr writeThread_; boost::function0 f = boost::bind(&DBTaskMgr::execute, this); writeThread_ = bo...
分类:
编程语言 时间:
2014-06-18 08:16:15
阅读次数:
283
(一)
下面代码:
tr1::shared_ptr pInv(createInvestment());
int daysHeld(const Investment* pi);
我们要调用daysHeld函数的话,就必须传递一个Investment指针,但是我们现在只有pInv对象,所以我们需要一个函数可将RAII class(本例为tr1::shared_ptr)对象转换为其所内含之原始资...
分类:
编程语言 时间:
2014-06-16 11:55:57
阅读次数:
250
(一)
假设有下面这两个函数:
int priority();
void processWidget(tr1::shared_ptr pw, int priority);
现在这样调用它:
processWidget(new Widget, priority());
但是!上面这种调用不能通过编译,因为tr1::shared_ptr构造函数需要一个原始指针,但是,这个构造函数是expl...
分类:
编程语言 时间:
2014-06-16 11:31:09
阅读次数:
296
boost 的smart_ptr 库中含有好几种智能指针,大家用的最多的应该是shared_ptr
,为啥呢?好用,不用管他啥时候会自动删除等等,而且拷贝和复制都很到位,
但实际上,这个库也有问题,连城写过一片文章,详细介绍了boost::shared_ptr库的四宗罪,不过我觉得有的问题,实际上不...
分类:
其他好文 时间:
2014-05-28 03:30:26
阅读次数:
343
起:C++98标准加入auto_ptr,即智能指针,C++11加入shared_ptr和weak_ptr两种智能指针,先从auto_ptr的定义学习一下auto_ptr的用法。template class
auto_ptr { // wrap an object pointer to ensure....
分类:
编程语言 时间:
2014-05-27 16:13:40
阅读次数:
440