<c:if test=""></c:if> 使用】的更多相关文章

共享指针 这个智能指针命名为boost::shared_ptr,定义在boost/shared_ptr.hpp里.智能指针boost::shared_ptr基本上类似于boost::scoped_ptr.关键不同之处在于boost::shared_ptr不一定要独占一个对象.它可以和其他boost::shared_ptr类型的智能指针共享所有权.在这种情况下,当引用对象的最后一个智能指针销毁后,对象才会被释放. 因为所有权可以在boost::shared_ptr之间共享,任何一个共享指针都可以被…
[1]boost::shared_ptr简介 boost::shared_ptr属于boost库,定义在namespace boost中,包含头文件#include<boost/shared_ptr.hpp>便可以使用. 上篇<智能指针boost::scoped_ptr>中我们看到boost::scoped_ptr独享所有权,不允许赋值.拷贝. 而boost::shared_ptr是专门用于共享所有权的,由于要共享所有权,其在内部使用了引用计数机制.同时也就意味着支持赋值和拷贝.…
shared_ptr<T>::operator->返回的是T*类型指针,非const T*指针.因此通过const shared_ptr<T>&类型的ptr可以直接调用T各个原始的方法,不用担心const与非const问题.具体shared_ptr::operator->实现如下,摘自boost1.52.0版本boost\smart_ptr\shared_ptr.hpp T * operator-> () const // never throws { B…
对于tr1::shared_ptr在安装vs同一时候会自带安装,可是版本号较低的不存在.而boost作为tr1的实现品,包括 "Algorithms Broken Compiler Workarounds Concurrent Programming Containers Correctness and Testing Data Structures Domain Specific Function Objects and Higher-order Programming Generic Pro…
文档: http://www.boost.org/doc/libs/1_57_0/libs/smart_ptr/shared_ptr.htm shared_ptr构造有个原型 template<class Y, class D> shared_ptr(Y * p, D d);d是deleter.如shared_ptr<FILE> ctx(fp,::flose); Introduction The shared_ptr class template stores a pointer…
boost::shared_ptr是boost库中用来管理指针的模板,使用它需要#include <boost/shared_ptr.hpp>.本文介绍它的一些基本用法. 第一,boost::shared_ptr管理的指针所指向的对象必须在堆中,因为该模板会在对象离开作用域后调用delete方法,如果对象位于栈中,程序编译能通过,但在运行中会崩溃.另外改模板提供了swap方法,可以让两个模板指针相互交换所指向的对象. #include <vector> #include <s…
弱指针boost::weak_ptr的定义在boost/weak_ptr.hpp里.到目前为止介绍的各种智能指针都能在不同的场合下独立使用.相反,弱指针只有在配合共享指针一起使用时才有意义.因此弱指针被看作是共享指针的观察者,用来观察共享指针的使用情况.当用到共享指针时,就要考虑是否需要使用弱指针了,这样可以解除一些环形依赖问题. #include <iostream> #include <windows.h> #include <boost/weak_ptr.hpp>…
1. boost::shared_ptr 前面我已经讲解了两个比较简单的智能指针,它们都有各自的优缺点.由于 boost::scoped_ptr 独享所有权,当我们真真需要复制智能指针时,需求便满足不了了,如此我们再引入一个智能指针,专门用于处理复制,参数传递的情况,这便是如下的boost::shared_ptr. boost::shared_ptr 属于 boost 库,定义在 namespace boost 中,包含头文件#include<boost/smart_ptr.hpp> 便可以使…
1. boost::shared_ptr 前面我已经讲解了两个比较简单的智能指针,它们都有各自的优缺点.由于 boost::scoped_ptr 独享所有权,当我们真真需要复制智能指针时,需求便满足不了了,如此我们再引入一个智能指针,专门用于处理复制,参数传递的情况,这便是如下的boost::shared_ptr. boost::shared_ptr 也属于 boost 库,定义在 namespace boost 中,包含头文件#include<boost/smart_ptr.hpp> 便可以…
tss.hpp定义了thread_specific_ptr,使用thread local storage 技术 1.在thread目录下的win32和pthread目录下thread_data.hpp定义了两个重要struct:tss_data_node和thread_data_base struct tss_data_node //tss_data_node对应相应线程 { boost::shared_ptr<boost::detail::tss_cleanup_function> func…
shared_ptr: 共享所有权 原文链接 描述 模版类 shared_ptr 存储动态构造对象的指针,通常是由C++ new语句完成的.这个对象指针在最后一个持有指针所有权的shared_ptr被销毁或者重置(reset)的时候,指针被delete. 例1: 使用 shared_ptr shared_pt<X> p1( new X ); shared_ptr<void> p2( new int(5) ); shared_ptr 会使用构造时的原始类型从而正确的删除指针,不管模版…
boost库中的智能指针shared_ptr, 功能强大, 且开销小,故受到广大coder的欢迎. 但在实际的使用过程中,笔者也发现了一些不足. 1.定制的删除器 shared_ptr除了可以使用默认的delete删除器来删除资源, 也可以定制删除器来删除资源, 但是删除的时候没有办法返回值, 这应该可以算是一个缺陷. 如对于文件句柄的操作 bool CFileIO::Open(LPCTSTR fileName, LPCTSTR mode){    m_pFile.reset(_tfopen(f…
TCP服务端和客户端 TCP服务端 #include <iostream> #include <stdlib.h> #include <boost/asio.hpp> void main() { boost::asio::io_service iosev; boost::asio::ip::tcp::acceptor myacceptor(iosev, boost::asio::ip::tcp::endpoint(boost::asio::ip::tcp::v4(),…
boost C++的正则表达式库boost.regex可以应用正则表达式于C++.正则表达式大大减轻了搜索特定模式字符串的负担,在很多语言中都是强大的功能. boost.regex库中两个最重要的类是boost::regex和boost::smatch,它们都在boost/regex.hpp文件中定义.前者用于定义一个正则表达式,而后者可以保存搜索结果. 小结:C++的正则表达式库早已有之,但始终没有哪个库纳入到标准化流程中.目前该库已经顺利的成立新一代C++标准库中的一员,结束了C++没有标准…
boost.unordered在C++标准容器std::set,std::multiset,std::map和std::multimap的基础上多实现了四个容器:boost::unordered_set,boost::unordered_multiset,boost::unordered_map和boost::unordered_multimap.那些名字很相似的容器之间并没有什么不同,甚至还提供了相同的接口.在很多情况下,替换这两种容器(std和boost)对你的应用不会造成任何影响. 小结:…
在这个库最重要的一个类就是boost::thread,它是在boost/thread.hpp里定义的,用来创建一个新线程.它已经被纳入C++标准库中. 小结:新一代C++标准将线程库引入后,将简化多线程开发. #include <iostream> #include <boost/thread.hpp> void wait(int sec) { boost::this_thread::sleep(boost::posix_time::seconds(sec));//boost的sl…
共享数组 共享数组的行为类型于共享指针.关键不同在于共享数组在析构时,默认使用delete[]操作符来释放所含的对象.因为这个操作符只能用于数组对象,共享数组必须通过动态分配的数组的地址来初始化.共享数组对应的类型是boost::shared_array,它的定义在boost/shared_array.hpp里. #include <iostream> #include <boost/shared_array.hpp> class runclass { public: ; publ…
多个元素使用#include <boost/scoped_array.hpp> 单个元素使用#include <boost/scoped_ptr.hpp> 作用域数组 作用域数组的使用方式与作用域指针相似.关键不同在于,作用域数组的析构函数使用delete[]操作符来来释放所包含的对象.因为该操作符只能用于数组对象,所以作用域数组必须通过动态分配的数组来初始化.对应的作用域数组类名为boost::scoped_array,它的定义在boost/scoped_array.hpp里.…
多个元素使用#include <boost/scoped_array.hpp> 单个元素使用#include <boost/scoped_ptr.hpp> 作用域指针 它独占一个动态分配的对象,对应的类名为boost::scoped_ptr,定义在boost/scoped_ptr.hpp中.不像std::auto_ptr,作用域指针不能传递它所包含的对象的所有权到另一个作用域指针.一旦用一个地址来初始化,这个动态分配的对象将在析构阶段释放.因为一个作用域指针只是简单保存和独占一个内…
为atoi取别名fun,fun实质上是函数指针 #include <iostream> #include <boost/function.hpp> void main() { boost::function<int(char *)>fun = atoi;//为atoi取别名fun,fun实质上是函数指针 std::cout << fun(") << std::endl; fun = strlen; std::cout <<…