博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
auto_ptr and scoped_ptr
阅读量:5331 次
发布时间:2019-06-14

本文共 1149 字,大约阅读时间需要 3 分钟。

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

转载于:https://www.cnblogs.com/bhlsheji/p/5134071.html

你可能感兴趣的文章
spring配置文件没有错,但是出现红叉的解决方法
查看>>
设计模式 ( 十六 ) 观察者模式Observer(对象行为型)
查看>>
Ubuntu16.04安装MySQLdb
查看>>
《分布式系统原理与范型》习题答案 4.命名
查看>>
接口和抽象类有什么区别
查看>>
犯犯错
查看>>
新硬盘挂载目录后文件消失解决办法
查看>>
Qt 5.2 Creator 和 vs2012 QT 插件的安装
查看>>
Ambiguous reference to member 'dataTask(with:completionHandle:)'错误
查看>>
同心砖雕广场
查看>>
[转] Oracle analyze 命令分析
查看>>
DB2建立不记录日志的表
查看>>
基础数据类型的补充.py
查看>>
ApiTestEngine框架
查看>>
架构模式
查看>>
编译型和解释型的区别&&Java从编译到执行的过程
查看>>
Java面向对象小结
查看>>
看开讲啦羽泉
查看>>
C# 删除字符串中的中文
查看>>
高精度算法_求组和
查看>>