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 in…
部分参考地址https://blog.csdn.net/yanglingwell/article/details/56011576 auto_ptr是c++标准库里的智能指针,但是具有以下几个明显的缺陷,使用时要注意 1.就是所谓的控制权转移,下面是模拟代码 auto_Ptr(auto_Ptr<T>&ap) { _ptr = new T; //先分配空间 _ptr = ap._ptr; //再资源转移 ap._ptr = NULL; //将原来的指针置空 } 在赋值运算符重载和拷贝构造…
什么是RAII? RAII是Resource Acquisition Is Initialization的简称,是C++语言的一种管理资源.避免泄漏的惯用法. RAII又叫做资源分配即初始化,即:定义一个类来封装资源的分配和释放,在构造函数完成资源的分配和初始化,在析构函数完成资源的清理,可以保证资源的正确初始化和释放. 为什么要使用RAII? 在计算机系统中,资源是数量有限且对系统正常运行具有一定作用的元素.比如:网络套接字.互斥锁.文件句柄和内存等等,它们属于系统资源.由于系统的资源是有限的…
首先我们看看scoped_ptr的基本使用,包括了swap(),get(),reset()的使用,重要的提醒是作用域结束的时候会自己主动析构,无需手动的释放资源: #include<boost/smart_ptr.hpp> #include<iostream> using namespace std; using namespace boost; struct posix_file { posix_file(const char * file_name)//一个文件类 { cout…
boost::scoped_ptr和std::auto_ptr非常类似,是一个简单的智能指针,它能够保证在离开作用域后对象被自动释放.下列代码演示了该指针的基本应用: #include <string> #include <iostream> #include <boost/scoped_ptr.hpp> class implementation { public: ~implementation() { std::cout <<"destroyi…
原文链接:http://en.wikibooks.org/wiki/More_C%2B%2B_Idioms/Resource_Acquisition_Is_Initialization Intent To guarantee release of resource(s) at the end of a scope To provide basic exception safety guarantee Also Known As Execute-Around Object Resource Rel…
使用boost的智能指针需要包含头文件"boost/smart_ptr.hpp",c++11中需要包含头文件<memory> 1.auto_ptr.scoped_ptr.scoped_array ①.auto_ptr是C++标准中的智能指针,在指针退出作用域的时候自动释放指针指向的内存,即使是异常退出的时候.auto_ptr实际上是一个对象,重载了operator*和operator->,且提供了一些成员函数,比如使用成员get()可以获得对应类型的原始指针. aut…
内存管理一直是令C++程序员最头疼的工作,C++继承了C那高效而又灵活的指针,使用起来稍微不小心就会导致内存泄露.野指针.越界访问等访问.虽然C++标准提供了只能指针std::auto_ptr,但是并没有解决所有问题.boost的smart_ptr库是对C++98标准的绝佳补充.它提供了六种智能指针,包括scoped_ptr.scoped_array.shared_ptr.shared_array.week_ptr.instrusive_ptr(不建议使用).现在我们就学习一下这几种智能指针的使…
智能指针的设计初衷是:      C++中没有提供自己主动回收内存的机制,每次new对象之后都须要手动delete.稍不注意就memory leak. 智能指针能够解决上面遇到的问题. C++中常见的智能指针包含(共七种):      std::auto_ptr      boost::scoped_ptr      boost::shared_ptr      boost::intrusive_ptr      boost::scoped_array      boost::shared_ar…
1. 引入 C++语言中的动态内存分配没有自动回收机制,动态开辟的空间需要用户自己来维护,在出函数作用域或者程序正常退出前必须释放掉. 即程序员每次 new 出来的内存都要手动 delete,否则会造成内存泄露, 有时我们已经非常谨慎了 , 然防不胜防:流程太复杂,程序员忘记 delete:异常导致程序过早退出,没有执行delete的情况屡见不鲜. void FunTest() { ]; FILE* pFile = fopen("1. txt", "w"); if…