#include "boost/scoped_ptr.hpp"

#include <iostream>

#include <memory>//contain auto_ptr 

using namespace std;

using  boost::scoped_ptr;

int main(int argc, char* argv[])

{

scoped_ptr<int > sp( new int(10) ) , sp2;

 //sp = new int(10)

 //error,由于拷贝构造函数和赋值构造函数都是私有的

 //

 cout<< *sp<<endl;

//sp2=sp;  //error

 int *p=sp.get(); //不会导致sp失去空间的占有权

 //delete p ;//将导致错误,由于sp是分配的空间的全部者,仅仅有它才有权利进行释放

 *p = 20;

 cout<< *sp<<endl;

 

 auto_ptr<int> ap(new int(1)) ,ap2;

 //ap = new int(1); //error

 ap2 = ap ; //ap将失去分配的空间的全部权

 int *p2 = ap2.get();//不会导致ap2失去空间的占有权

 *p2=100;

 //delete p2 ;//将导致错误,由于ap2是分配的空间的全部者,仅仅有它才有权利进行释放

 return 0;

}



/////////////////////////////////////////////////////

智能指针类事实上包括有几个数据成员当中一个就是全部权标记,另外一个就是指向动态分配的空间的地址。

1.仅仅有对这个动态分配的空间拥有全部权的指针或者智能指针对象才有权利去释放这个空间。

由于假设使用指针的话没有全部权保护,所以尽管原则上是拥有全部权的才干释放可是假设是使用指针 就没办法确定一个指针是否占有全部权。所以不建议这么做。

//全部权与使用权分离。有使用权不一定有全部权!

另外智能指针类能够通过构造函数的訪问属性和參数特性来禁止某些操作或同意某些操作。

比方把重载赋值为私有来禁止赋值,把拷贝构造函数设置为私有来禁止拷贝。

2.对于智能指针而言get操作智能取得动态分配的空间的地址。而不能使智能指针失去全部权。

3.一个动态分配的空间在仅仅有一个全部权而且在某一个仅仅能有一个全部者。

但能够有多个使用者。

使用者能够对空间的内容进行赋值,但不同意进行释放操作。

auto_ptr代表的动态分配的空间的全部权是能够转移( 通过赋值)的。

scoped_ptr代表的动态分配的空间的全部权则不能转移(重载赋值为私有来禁止赋值,把拷贝构造函数设置为私有来禁止拷贝。)!

auto_ptr and scoped_ptr的更多相关文章

  1. 智能指针之auto_ptr和scoped_ptr

    部分参考地址https://blog.csdn.net/yanglingwell/article/details/56011576 auto_ptr是c++标准库里的智能指针,但是具有以下几个明显的缺 ...

  2. 智能指针 auto_ptr、scoped_ptr、shared_ptr、weak_ptr

    什么是RAII? RAII是Resource Acquisition Is Initialization的简称,是C++语言的一种管理资源.避免泄漏的惯用法. RAII又叫做资源分配即初始化,即:定义 ...

  3. boost准模板库scoped_ptr指针的使用以及auto_ptr智能指针的对照

    首先我们看看scoped_ptr的基本使用,包括了swap(),get(),reset()的使用,重要的提醒是作用域结束的时候会自己主动析构,无需手动的释放资源: #include<boost/ ...

  4. Boost scoped_ptr scoped_array 以及scoped_ptr与std::auto_ptr对比

    boost::scoped_ptr和std::auto_ptr非常类似,是一个简单的智能指针,它能够保证在离开作用域后对象被自动释放.下列代码演示了该指针的基本应用: #include <str ...

  5. Resource Acquisition Is Initialization(RAII Idiom)

    原文链接:http://en.wikibooks.org/wiki/More_C%2B%2B_Idioms/Resource_Acquisition_Is_Initialization Intent ...

  6. boost-智能指针

    使用boost的智能指针需要包含头文件"boost/smart_ptr.hpp",c++11中需要包含头文件<memory> 1.auto_ptr.scoped_ptr ...

  7. boost之内存管理

    内存管理一直是令C++程序员最头疼的工作,C++继承了C那高效而又灵活的指针,使用起来稍微不小心就会导致内存泄露.野指针.越界访问等访问.虽然C++标准提供了只能指针std::auto_ptr,但是并 ...

  8. 你说你会C++? —— 智能指针

    智能指针的设计初衷是:      C++中没有提供自己主动回收内存的机制,每次new对象之后都须要手动delete.稍不注意就memory leak. 智能指针能够解决上面遇到的问题. C++中常见的 ...

  9. 智能指针剖析(上)std::auto_ptr与boost::scoped_ptr

    1. 引入 C++语言中的动态内存分配没有自动回收机制,动态开辟的空间需要用户自己来维护,在出函数作用域或者程序正常退出前必须释放掉. 即程序员每次 new 出来的内存都要手动 delete,否则会造 ...

随机推荐

  1. CodeForce 439C Devu and Partitioning of the Array(模拟)

     Devu and Partitioning of the Array time limit per test 1 second memory limit per test 256 megabytes ...

  2. Socket 心跳包机制总结

    跳包之所以叫心跳包是因为:它像心跳一样每隔固定时间发一次,以此来告诉服务器,这个客户端还活着.事实上这是为了保持长连接,至于这个包的内容,是没有什么特别规定的,不过一般都是很小的包,或者只包含包头的一 ...

  3. uva 140

    思路:暴力+剪枝 uva140 wa了好多次……数组开小了……!!! #include <iostream> #include <cstdio> #include <cm ...

  4. 谈谈Ext JS的组件——布局的用法续二

    绝对布局(Ext.layout.container.Absolute) 绝对布局让我回忆到了使用Foxpro开发的时候,哪时候的界面布局就是这样.通过设置控件的左上角坐标(x.y)和宽度来进行的,由于 ...

  5. Swift - 类型嵌套(以扑克牌结构体为例)

    类型嵌套,简单来说实在一个类型中包含另外一个类型.我们拿一副扑克来说明. 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 //类 ...

  6. c++ :: 域操作符

    c++ :: 域操作符 作用域:变量在程序中的起作用范围简单分为:全局作用域,局部作用域,语句作用域作用域优先级:范围越小优先级越高作用域运算符:"::" 如果希望在局部变量的作用 ...

  7. eclipse不能进入debug

    首先说明一下.我肯定是以debug模式启动的.断点程序肯定能走到. 可是一点页面,程序就跳到class文件,而不是Java文件. 解决的方法是:window---preferences---tomca ...

  8. C语言函数参数压栈顺序为何是从右到左?(从左向右的话,碰到printf的会陷入死循环)

    上学期学习了汇编语言,并在操作系统实验中使用了汇编+C语言混合编程,中间也了解了一些C语言与汇编语言的对应关系. 由于汇编语言是底层的编程语言,各种函数参数都要直接控制栈进行存取,在混合编程中,要用汇 ...

  9. ORALCE 之LRU链与脏LRU链【转载】

    今天是2013-09-09,时别n久的一篇经典文章,有被我在google发现了,再次转载一下.学习一下. 一.LRU链: 任何缓存的大小都是有限制的,并且总不如被缓存的数据多.就像Buffer cac ...

  10. drupal 7 模块开发,hook_form

    因为不是系统学习,只能把每天自己学习到的东西零碎的记录下来. 一来方便自己记忆,二来可供大家查阅. 后续有精力再去做进一步的整理. 1 开发一个模块分为有下面几个文件 hook.admin.inc h ...