简介boost::shared_ptr是可以共享所有权的指针。如果有多个shared_ptr共同管理同一个对象时,只有这些shared_ptr全部与该对象脱离关系之后,被管理的对象才会被释放。通过下面这个例子先了解下shared_ptr的基本用法: 1 #include 2 #include 3
共享指针:boost::shared_ptr支持拷贝构造和赋值操作,多个shared_ptr对象可以指向同一个对象。当所有shared_ptr对象超出作用域或被显式重置时,引用计数减少,只有当引用计数为零时,对象内存才会被释放。 异常安全:boost::shared_ptr提供了异常安全的内存管理。即使在异常抛出的情况下,也能保证对象内存被正确释放,防止资源...
boost::shared_ptr<MyObject>ptr(newMyObject());MyObject*rawPtr=ptr.release();deleterawPtr;// 需要手动删除对象 请注意,在删除boost::shared_ptr之后,你需要确保不再使用它,因为它已经指向了一个已释放的对象,这可能导致未定义的行为。
这时需要传递一个 shared_ptr ,否则就不能保持 shared_ptr 管理这个类对象的语义( 因为有一个 raw pointer 指向这个类对象,而 shared_ptr 对类对象的这个引用没有计数,很有可能 shared_ptr 已经把类对象资源释放了,而那个调用函数还在使用类对象——显然,这肯定会产生错误 )。
boost::shared_ptr<TTF_Font> screenFont; screenFont = boost::shared_ptr<TTF_Font>( TTF_OpenFont("slkscr.ttf", 8), CloseFont() ); 如果,稍后,我需要明确释放此对象,这样做是正确的: screenFont.reset(); 然后让 screenFont (实际的 shared_ptr ...
template<class Y, class D> shared_ptr(Y * p, D d);d是deleter。如 1. shared_ptr<FILE> ctx(fp,::flose); 1. Introduction The shared_ptr class template stores a pointer to a dynamically allocated object, typically with a C++new-expression. The object pointed to is guara...
虽然boost.shared_ptr是个非常好的东西,使用它可以使得c++程序不需要考虑内存释放的问题,但是还是有很多必须注意的地方。下面罗列了一些本人在实际工作中经常碰到的使用shared_ptr出问题的几种情况。 1.shared_ptr多次引用同一数据,如下: { int* pInt = new int[100]; ...
cout<<“*pA=“<<*pA<<endl;cout<<“*ptr_arr=“<<*ptr_arr<<endl;// 操作对象boost::shared_ptr ptr_obj;boost::shared_ptrptr_MyClass(newMyClass());ptr_obj=ptr_MyClass;ptr_obj->func();// 智能指针避免普通指针和智能指针混用// 防止智能指针计数器为0将内存释放后,普通指针就变了野指针...
Boost库提供了三种智能指针:shared_ptr、scoped_ptr和weak_ptr。其中,shared_ptr是一种共享指针,可以多个指针共同管理同一个对象的内存;scoped_ptr是一种独占指针,不允许多个指针同时指向同一个对象;weak_ptr是一种弱指针,可以检测到对象是否已被释放。以下是shared_ptr的示例代码: ...
boost::scoped_ptr虽然简单易用,但它不能共享所有权的特性却大大限制了其使用范围,而boost::shared_ptr可以解决这一局限。顾名思义,boost::shared_ptr是可以共享所有权的智能指针,首先让我们通过一个例子看看它的基本用法: #include<string> #include<iostream> ...