使用智能指针来管理对象 (基于RAII)
//
//一个简单的防止内存泄露的例子
//
void test() {
//使用RAII的特性管理资源
//当智能指针unique_ptr被销毁时,它指向的对象也将被销毁
//这里test函数返回后 p将自动销毁
//unique_ptr<int[]> p( new int[200] ); //直接生成资源
//test函数返回后 p不能被正常销毁,就会造成资源泄露
//int* p = new int[200];
} int main()
{
while( ) {
test();
Sleep( );
} return ;
}
//[智能指针]操作测试 //######################################################################################################
//#【 unique_ptr 】
unique_ptr<string> unique_ptr__fn() {
//【 unique_ptr 】
// 是一个同一时间只能指向一个对象,并且不能被拷贝和赋值的智能指针
unique_ptr<string> a( new string( "test" ) ); //new出一个string 并使用'智能指针(a)'指向它
*a = "what? "; //修改指针a所指向的string的值
//unique_ptr<string> b( a ); //错误,不能被拷贝
//unique_ptr<string> c = a; //错误,不能被赋值
unique_ptr<string> d( a.release() ); //可以调用release()释放指针用以转交所有权, 注意:此时并不销毁指向的对象
cout << *d;
//d.reset(); //手动调用reset销毁指向的对象
//cout << *d; //错误,指向的对象已经被手动销毁 unique_ptr<string> e = move( d ); //unique_ptr 支持move() 说明unique_ptr中存在move构造
//so 也可以用来作为返回值
//cout << *d; //错误,指针d已经move到e return e; //返回智能指针e
} void test_unqiue_ptr() {
unique_ptr<string> f = unique_ptr__fn(); //此时f = move(e);
cout << *f;
} //######################################################################################################
//#【 shared_ptr 】
void shared_ptr__fn( shared_ptr<string>& x) {
//【shared_ptr_test】
// 带有引用计数的智能指针,所以允许赋值与copy操作,仅当计数归0时才销毁指向的对象
// 所以这样看来 在不考虑效率的情况下 shared_ptr是可以代替unique_ptr的
// 但是对于一个不需要共享的资源来说,尽量使用unique_ptr
shared_ptr<string> a( x ); //copy构造 OK
cout << *a;
//shared_ptr<string> b = a; //copy构造 OK
//shared_ptr<string> c;
//c = b; //赋值操作 OK return; //ret后局部指针a将失效,但是并不会销毁指向的对象
} void shared_ptr_test() {
shared_ptr<string> x( new string( "test " ) ); //构造一个shared_ptr
shared_ptr__fn(x); //将指针x传入下个函数中 return; //ret后 对象将被销毁
}
使用智能指针来管理对象 (基于RAII)的更多相关文章
- C++11智能指针原理和实现
一.智能指针起因 在C++中,动态内存的管理是由程序员自己申请和释放的,用一对运算符完成:new和delete. new:在动态内存中为对象分配一块空间并返回一个指向该对象的指针: delete:指向 ...
- C++智能指针的原理和实现
一.智能指针起因 在C++中,动态内存的管理是由程序员自己申请和释放的,用一对运算符完成:new和delete. new:在动态内存中为对象分配一块空间并返回一个指向该对象的指针: delete:指向 ...
- boost库:智能指针
1. C98里的智能指针 std::auto_ptr ,本质上是一个普通的指针,通过地址来访问你一个动态分配的对象,初始化时需要传递一个由new操作符返回的对象地址. std::auto_ptr的析构 ...
- 基于C/S架构的3D对战网络游戏C++框架_05搭建系统开发环境与Boost智能指针、内存池初步了解
本系列博客主要是以对战游戏为背景介绍3D对战网络游戏常用的开发技术以及C++高级编程技巧,有了这些知识,就可以开发出中小型游戏项目或3D工业仿真项目. 笔者将分为以下三个部分向大家介绍(每日更新): ...
- [CPP] 智能指针
介绍 C++ 的智能指针 (Smart Pointers) 相关 API. C++ 中的智能指针是为了解决内存泄漏.重复释放等问题而提出的,它基于 RAII (Resource Acquisition ...
- enote笔记法使用范例(2)——指针(1)智能指针
要知道什么是智能指针,首先了解什么称为 “资源分配即初始化” what RAII:RAII—Resource Acquisition Is Initialization,即“资源分配即初始化” 在&l ...
- [4] 智能指针boost::scoped_ptr
[1]boost::scoped_ptr简介 boost::scoped_ptr属于boost库,定义在namespace boost中,包含头文件#include <boost/scoped_ ...
- C++智能指针的实现
说起智能指针,不少人都不陌生.比方auto_ptr.shared_ptr.unique_ptr.weak_ptr. 依据shared_ptr的功能,自己仿造也实现了个. 对于shared_ptr这样的 ...
- 以对象管理资源——C++智能指针auto_ptr简介
auto_ptr是C++标准库提供的类模板,它可以帮助程序员自动管理用new表达式动态分配的单个对象.auto_ptr对象被初始化为指向由new表达式创建的对象,当auto_ptr对象的生命期结束时, ...
随机推荐
- python数据结构
. 数据结构¶ .1. 深入列表¶ 链表类型有很多方法,这里是链表类型的所有方法: list.append(x) 把一个元素添加到链表的结尾,相当于 a[len(a):] = [x] . list ...
- PPPoE(以太网上的点对点协议)
协议概述 PPPoE分为两个阶段,即Discovery(地址发现)阶段和PPP会话阶段.当某个主机希望发起一个PPPoE会话时,它必须首先执行Discovery来确定对方的以太网MAC地址并建立起一个 ...
- [读书笔记]java中的volatile关键词
以下内容大多来自周志明的<深入理解Java虚拟机>. 当一个变量被volatile修饰后,它将具备两种特性: 1. 保证此变量对所有线程的可见性,这里的“可见性”是指当一条线程修改了这个变 ...
- 【转】使用Eclipse搭建Python开发环境
因为要进行自动化测试,所以要搭建Python开发环境.这里将使用Eclipse+pyDev进行搭建,在此作为笔记记录下来. 需要的组件: 1.Eclipse SDK 3.7(这里将不再叙述Eclips ...
- groupspecWidhoutAuthorizations与groupspecWidthAuthorizations的区别
GroupSpecifier是一个用来定义group所有参数的类.首先,将它命名为“myGroup/g1”.然后设置 serverChannel与Stratus进行沟通.最后发布.这样,我们就完成了P ...
- ArcGIS Earth
恩,万众瞩目的ArcGIS Earth,现在华丽丽的可以在官网上下载了 满怀希望的心花怒放的我就去下载了...... 然后得然后...... 打开界面简洁的不要不要的,连个Esri的logo都没有.好 ...
- 各种模板(part 1)
GCD: int gcd(int a,int b) { ?a:gcd(b,a%b); } 快速幂: void work(int x,int y) //x^y { ; ) { ==) ans=ans*x ...
- TimeStamp
private void Form1_Load(object sender, EventArgs e) { textBox1.Text= GenerateTimeStamp(System.DateTi ...
- 关于是用dotnet获取本机IP地址+计算机名的方法
印象中在maxscript帮助文档里找到过方法,但是当时没记下来.只能通过dotnet实现了. 如果电脑有无线网卡和本地连接,可能会出现乱码,也问了写dotnet的朋友,提供了一些思路,不过最终还是使 ...
- (转) Playing FPS games with deep reinforcement learning
Playing FPS games with deep reinforcement learning 博文转自:https://blog.acolyer.org/2016/11/23/playing- ...