智能指针tr1::shared_ptr、boost::shared_ptr使用

对于tr1::shared_ptr在安装vs同时会自带安装,但是版本较低的不存在。而boost作为tr1的实现品,包含

“Algorithms

Broken Compiler Workarounds

Concurrent Programming

Containers

Correctness and Testing

Data Structures

Domain Specific

Function Objects and Higher-order Programming

Generic Programming

Image Processing

Input/Output

Inter-language Support

Iterators

Language Features Emulation

Math and Numerics

Memory

Parsing

Patterns and Idioms

Preprocessor Metaprogramming

Programming Interfaces

State Machines

String and Text Processing

System

Template Metaprogramming

Miscellaneous ”

等一系列更安全、更丰富的c++函数或库的实现品。可以在官网下载,其中包含详细的API文档与例程。其中boost::shared_ptr是对tr1的shared_ptr的实现。作为智能指针(类指针对象)二者的使用方法相似,具体见下方代码。

头文件

#include <iostream>

using namespace std;

class Test
{
public:
	Test();
	~Test();
};

实现文件

#include "head.h"

Test::Test()
{
    cout << "construct Test." << endl;
}

Test::~Test()
{
    cout << "destruct Test." << endl;
}

main文件

//boost中shared_ptr头文件
#include <boost/shared_ptr.hpp>

//vs2005一并中安装的库是不带shared_ptr的
#include <memory>
#include "head.h"

//实验tr1::shared_ptr
void test_shared_ptr()
{
    cout << "I am tr1." << endl;
    tr1::shared_ptr<Test> p_test(new Test());
}

//实验boost/shared_ptr
void test_boost_shared_ptr()
{
	cout << "I am boost." << endl;
	boost::shared_ptr<Test> p_boost_test(new Test());
}

int main()
{
    test_shared_ptr();
    cout << "**************************" << endl;
	test_boost_shared_ptr();

	system("pause");
}

执行效果:

上述两种方式是使用对象管理资源的最佳实现,标准库也提供了auto_ptr,但是这种对象不能够复制。

对于使用对象管理资源的思路,C++t推荐的原则是RAII,即Resource aquisition is initialasition。

***************************************************************************

原创,本文链接:http://blog.csdn.net/u012150179/article/details/37965931

时间: 2024-12-24 01:24:45

智能指针tr1::shared_ptr、boost::shared_ptr使用的相关文章

智能指针 std::auto_ptr 和 shared_ptr

需要注意: auto_ptr 类可以用于管理由 new 分配的单个对象,但是无法管理动态分配的数组(我们通常不会使用数组,而是使用 vector 代替数组).auto_ptr 在拷贝和赋值的时候有不寻常的行为,因此 auto_ptrs 不能被保存在 stl 的容器中.当 auto_ptr 离开了自己的作用域或者被销毁,由 auto_ptr 管理的对象也会被销毁. 使用std::auto_ptr需要的头文件: #include <memory> // 示例 1(b): 安全代码, 使用了auto

智能指针的模拟实现shared_ptr 循环引用 定置删除器

auto_ptr与scoped_ptr的实现见本人的上篇博客. 三.shared_ptr shared_ptr的实现原理是通过引用计数来实现,只有当引用计数为1时才释放空间,否则只需将引用计数减1.拷贝和赋值将引用计数加1,具体代码如下: template <typename T> class SharedPtr { public: SharedPtr(); SharedPtr(T* ptr); SharedPtr(const SharedPtr<T>& ap); ~Sha

【C++】智能指针详解(四):shared_ptr

在开始本文内容之前,我们再来总结一下,前文内容: 1.智能指针采用RAII机制,在构造对象时进行资源的初始化,析构对象时进行资源的清理及汕尾. 2.auto_ptr防止拷贝后析构释放同一块内存,采用"转移所有权"的方法.(实际开发中auto_ptr并不实用) 3.scoped_ptr与auto_ptr类似,但是它与auto_ptr最大的区别是:它不能转移所有权,即就是禁止拷贝/赋值!(当然,我们也探讨了C++中禁止拷贝对象的技术,在此不赘述) 回顾完前文内容后,我们今天来讨论share

四种智能指针:auto_ptr,unique_ptr,shared_ptr,weak_ptr

stl中auto_ptr,unique_ptr,shared_ptr,weak_ptr四种智能指针的使用总结 (1)auto_ptr 主要用于解决资源自动释放的问题.防止用户忘记delete掉new申请的内存空间.使用auto_ptr会在离开变量的作用域之后直接调用析构函数进行资源释放. void Function() { auto_ptr<Obj> ptr(new Obj(20)); ... if (error occur) throw exception... } 但是,这是一种被c++1

Boost库中的智能指针 shared_ptr智能指针

shared_ptr智能指针的意思即:boost::shared_ptr是可以智能的管理动态分配的内存资源,几个智能指针可以同时共享一个动态分配的内存的所有权. 下面我们通过一个例子来学习一下它的用法: 注 :使用shared_ptr智能指针,要加入#include <boost/shared_ptr.hpp>头文件 class example { public: ~example() { std::cout <<"It's over\n"; } void do

智能指针auto_ptr

前奏: Garbage Collection 技术一直颇受注目,并且在 Java 中已经发展成熟,成为内存管理的一大利器,但它在 C++ 语言中的发展却不顺利,C++ 为了追求运行速度,20 年来态度坚决地将其排除在标准之外. 为了稍许平复因为没有 Garbage Collection 而引发的 C++ 程序员的怨气,C++对 Smart Pointer 技术采取了不同的态度. 首先,了解一下智能指针, 该方法使用一个指针类来代表对资源的管理逻辑,并将指向资源的句柄(指针或引用)通过构造函数传递

C++智能指针剖析(下)boost::shared_ptr&amp;其他

1. boost::shared_ptr 前面我已经讲解了两个比较简单的智能指针,它们都有各自的优缺点.由于 boost::scoped_ptr 独享所有权,当我们真真需要复制智能指针时,需求便满足不了了,如此我们再引入一个智能指针,专门用于处理复制,参数传递的情况,这便是如下的boost::shared_ptr. boost::shared_ptr 属于 boost 库,定义在 namespace boost 中,包含头文件#include<boost/smart_ptr.hpp> 便可以使

boost智能指针之shared_ptr和weak_ptr

std::auto_ptr很多的时候并不能满足我们的要求,比如auto_ptr不能用作STL容器的元素.boost的smart_ptr中提供了4种智能指针和2种智能指针数组来作为std::auto_ptr的补充. shared_ptr<boost/shared_ptr.hpp>:使用shared_ptr进行对象的生存期自动管理,使得分享资源所有权变得有效且安全. weak_ptr<boost/weak_ptr.hpp>:weak_ptr 是 shared_ptr 的观察员.它不会干

智能指针 shared_ptr 解析

最近正在进行<Effective C++>的第二遍阅读,书里面多个条款涉及到了shared_ptr智能指针,介绍的太分散,学习起来麻烦,写篇blog整理一下. LinJM   @HQU shared_ptr是一个智能指针.在C++ 11颁布之前,它包含在TR1(Technical Report 1)当中,现在囊括在C++11的标准库中. 智能指针 智能指针(Smart pointers)是存储"指向动态分配(在堆上)的对象的指针"的对象.也就是说,智能指针其实是个对象.不过