auto_ptr and scoped_ptr
#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的更多相关文章
- 智能指针之auto_ptr和scoped_ptr
部分参考地址https://blog.csdn.net/yanglingwell/article/details/56011576 auto_ptr是c++标准库里的智能指针,但是具有以下几个明显的缺 ...
- 智能指针 auto_ptr、scoped_ptr、shared_ptr、weak_ptr
什么是RAII? RAII是Resource Acquisition Is Initialization的简称,是C++语言的一种管理资源.避免泄漏的惯用法. RAII又叫做资源分配即初始化,即:定义 ...
- boost准模板库scoped_ptr指针的使用以及auto_ptr智能指针的对照
首先我们看看scoped_ptr的基本使用,包括了swap(),get(),reset()的使用,重要的提醒是作用域结束的时候会自己主动析构,无需手动的释放资源: #include<boost/ ...
- Boost scoped_ptr scoped_array 以及scoped_ptr与std::auto_ptr对比
boost::scoped_ptr和std::auto_ptr非常类似,是一个简单的智能指针,它能够保证在离开作用域后对象被自动释放.下列代码演示了该指针的基本应用: #include <str ...
- Resource Acquisition Is Initialization(RAII Idiom)
原文链接:http://en.wikibooks.org/wiki/More_C%2B%2B_Idioms/Resource_Acquisition_Is_Initialization Intent ...
- boost-智能指针
使用boost的智能指针需要包含头文件"boost/smart_ptr.hpp",c++11中需要包含头文件<memory> 1.auto_ptr.scoped_ptr ...
- boost之内存管理
内存管理一直是令C++程序员最头疼的工作,C++继承了C那高效而又灵活的指针,使用起来稍微不小心就会导致内存泄露.野指针.越界访问等访问.虽然C++标准提供了只能指针std::auto_ptr,但是并 ...
- 你说你会C++? —— 智能指针
智能指针的设计初衷是: C++中没有提供自己主动回收内存的机制,每次new对象之后都须要手动delete.稍不注意就memory leak. 智能指针能够解决上面遇到的问题. C++中常见的 ...
- 智能指针剖析(上)std::auto_ptr与boost::scoped_ptr
1. 引入 C++语言中的动态内存分配没有自动回收机制,动态开辟的空间需要用户自己来维护,在出函数作用域或者程序正常退出前必须释放掉. 即程序员每次 new 出来的内存都要手动 delete,否则会造 ...
随机推荐
- Keepalived安装工具
装keepalived前,要先检查主机上是否已经安装, ps -ef | grep keepalive 不检查的话.easy把前人装的东西覆盖掉,那么曾经弄的配置文件都没了比較麻烦. 下面都为root ...
- Swift - 内存泄露原因(循环强引用)及解决办法
Swift使用自动引用计数(ARC)来管理应用程序的内存使用.在大多是情况下,并不需要考虑内存的管理.当实例不再需要的时候,ARC会自动释放这些实例所使用的内存. 但ARC并不是绝对安全的.下面两种情 ...
- 4种Delphi IDE的调试时查看内存的方法,太酷了!
1.ctrl+alt+m,可以查看每个函数过程的内存位置 2.Ctrl+Alt+C 查看代码对应的汇编 3.原来用delphi看变量信息一直是简单的用watch看,但是有时候变量值直接用特定类型看总是 ...
- 关于IOCP,某些地方就是不让人彻底舒服(WSASend重叠post数据)
开门见山,直接就事论事. 假如有这么一个基于IOCP模型的Server,这个Server提供的所有服务中有这么一种服务……文件下载,我们再假设Server端存有一个20G的文件,客户端这时发送一个请求 ...
- Infinite scroll has been called autopagerize, unpaginate, endless pages
http://www.infinite-scroll.com/ Infinite scroll has been called autopagerize, unpaginate, endless pa ...
- IE网页js语法错误2行字符1,FF中正常
今天开发过程中,突然遇到此奇葩问题,我之前以为是我js打开模态窗体传递的url参数有问题,我使用open没问题.使用模态窗体则会先弹出此错误然后再显示新打开的界面.网上查了许久,总结解决方案如下: 1 ...
- hdu 4284 Travel(floyd + TSP)
虽然题中有n<=100个点,但实际上你必须走过的点只有H<=15个.而且经过任意点但不消耗C[i]跟D[i]可以为无限次,所以可以floyd预处理出H个点的最短路,之后剩下的...就成了裸 ...
- 运用mapreduce计算tf-idf
问题描写叙述:给定一个大文件,文件里的内容每一行为:文档名,文档内容. input 文档名1,word1 Word2 ....... 文档名2,word1 Word2 ....... output w ...
- IOS上怎样画出1像素的线
#define SINGLE_LINE_WIDTH (/[UIScreen mainScreen].scale) #define SINGLE_LINE_ADJUST_OFFSET ((/[UIScr ...
- JavaFX学习之路:详细解释JavaFX架构和框架
JavaFX 2.0平台是基于Java技术的富client平台.它使应用程序开发人员更加easy的开发和部署跨平台的富互联网应用(RIA).JavaFX 2.0文档包括了JavaFX 2.0所提供的功 ...