1. boost::scoped_ptr is a smart pointer that is the sole owner of a dynamically allocated object and cannot be copied or moved.

#include <boost/scoped_ptr.hpp>
#include <iostream> int main() {
boost::scoped_ptr<int> p(new int());
std::cout << *p << std::endl; p指针地址
p.reset(new int()); reset()释放之前的对象,重新设置新的对象
std::cout << *p.get() << std::endl; get()获取指针地址
p.reset();
std::cout << std::boolalpha << static_cast<bool>(p) << std::endl; 返回p的bool值,此时为false
return ;
}

A smart pointer of type boost::scoped_ptr can't transfer ownership of an object. Once initialized an address, the dynamically allocated object is released when

the destructor is executed or when the member function reset() is called.

2. boost::scoped_array is used like boost::scoped_ptr. The crucial difference is that the destructor of boost::scoped_array uses the operator delete[] to release the contained object. Because this operator only applies to arrays, a boost::scoped_array must be initialized with the address of a dynamically allocated array.

#include <boost/scoped_array.hpp>

int main() {
boost::scoped_array<int> p(new int[]);
*p.get() = ;
p[] = ;
p.reset(new int[]);
return ;
}

3.  The smart pointer boost::shared_ptr is similar to boost::scoped_ptr. The key difference is that boost::shared_ptr is not necessarily the exclusive owner of an object. Onwership can be shared with other smart pointers of type boost::shared_ptr. In such a case, the shared object is not released until the last copy of the shared pointer referencing the object is destroyed. The smart pointer can be copied.

#include <boost/shared_ptr.hpp>
#include <iostream> int main() {
boost::shared_ptr<int> p1(new int());
std::cout << *p1 << std::endl;
boost::shared_ptr<int> p2(p1);
p1.reset(new int());
std::cout << *p1.get() << std::endl;
p1.reset();
std::cout << std::boolalpha << static_cast<bool>(p2) << std::endl;
return ;
}

输出为:

1

2

true

When reset() is called on p1, a new int object is anchored in p1. This doesn't mean that the existing int object is destroyed. Since it is also anchored in p2, it continues to exist. boost::shared_ptr uses a reference counter internally. Only when boost::shared_ptr detects that the last copy of the smart pointer has been destroyed is the contained object released with delete.

4. boost::shared_array  calls delete[] in the destructor, this smart pointer can be used for arrays.

#include <boost/shared_array.hpp>
#include <iostream> int main() {
boost::shared_array<int> p1(new int[]);
{
boost::shared_array<int> p2(p1);
p2[] = ;
}
std::cout << p1[] << std::endl;
return ;
}

the smart pointers p1 and p2 share ownership of the dynamically allocated int array. When the array in p2 is accessed with operator[] to store the number 1, the same array is accessed with p1. Thus, the example writes 1 to standard output.

5. boost::weak_ptr only make sense if used in conjunction with boost::shared_ptr.

#include <boost/shared_ptr.hpp>
#include <boost/weak_ptr.hpp>
#include <thread>
#include <functional>
#inclue <iostream> void reset(boost::shared_ptr<int>& sh) {
sh.reset();
} void print(boost::weak_ptr<int>& w) {
boost::shared_ptr<int> sh = w.lock();
if (sh) {
std::cout << *sh << std::endl;
}
} int main() {
boost::shared_ptr<int> sh(new int());
boost::weak_ptr<int> w(sh);
std::thread t1(reset, std:ref(sh));
std::thread t2(print, std::ref(w));
t1.join();
t2.join();
return ;
}

boost::weak_ptr must be initialized with a boost::shared_ptr. Its most important member function is lock(). lock() returns a boost::shared_ptr that shares ownership with the shared pointer used to initialize the weak pointer. In case the shared pointer is empty, the returned pointer will be empty as well.

boost smart pointer的更多相关文章

  1. 理解smart pointer之三:unique_ptr

    unique_ptr最先在boost中被定义,后来被C++标准委员会选中为C++11的feature之一. std::unique_ptr is a smart pointer that retain ...

  2. c++(smart pointer)

    (一)首先对智能指针有一些概念性的了解 **********本部分内容摘自开源中国社区http://my.oschina.net/u/158589/blog/28994******** 1.什么是智能 ...

  3. Smart pointer 智能指针小总结

    Smart pointer line 58之后smart pointer里的计数已经是0,所以会真正释放它引用的对象,调用被引用对象的析构函数.如果继续用指针访问,会出现如下图的内存访问异常.所以说如 ...

  4. 到底有多少种智能指针(smart pointer)

    最近Qt的blog总结了到底有多少种smart pointer, 下面是一个简要的介绍: 1.   QPointer :提供对指针的保护,当一个指针被删除以后,再使用不会造成野指针或者指针溢出.比如 ...

  5. [CareerCup] 13.8 Smart Pointer 智能指针

    13.8 Write a smart pointer class. A smart pointer is a data type, usually implemented with templates ...

  6. Why do we need smart pointer and how to implement it.

    Here are two simple questions. Problem A #include <string> include <iostream> using name ...

  7. c++ smart pointer

    智能指针(smart pointer)是存储指向动态分配(堆)对象指针的类,用于生存期控制,能够确保自动正确的销毁动态分配的对象,防止内存泄露.它的一种通用实现技术是使用引用计数(reference ...

  8. c/c++ 标准库 智能指针( smart pointer ) 是啥玩意儿

    标准库 智能指针( smart pointer ) 是啥玩意儿 一,为什么有智能指针??? c++程序员需要自己善后自己动态开辟的内存,一旦忘了释放,内存就泄露. 智能指针可以帮助程序员"自 ...

  9. C++ smart pointer智能指针

      在C++中,程序员可以直接操作内存,给编程增加了不少的灵活性.但是灵活性是有代价的,程序员必须负责自己负责释放自己申请的内存,否则就会出现内存泄露.智能指针就是为了解决这个问题而存在的.它和其他指 ...

随机推荐

  1. 51nod 1298:圆与三角形(计算几何)

    题目链接 判断圆和三角形是否相交   可以转化为   判断三条线段是否和圆相交 #include<iostream> #include<cstdio> #include< ...

  2. mobx学习笔记04——mobx常用api

    1 可观察的数据(observable) observable是一种让数据的变化可以被观察的方法. 那些数据可被观察? -原始类型 String.Number.Boolean.Symbol -对象 - ...

  3. php round()函数 语法

    php round()函数 语法 作用:round()函数的作用是对浮点数进行四舍五入 语法:round(X,prec) 参数: 参数 描述 X 要做处理的数字 prec 指定小数点后的位数 说明:返 ...

  4. cf 1263

    A #include<bits/stdc++.h> using namespace std; int main(){ int t;cin>>t; while(t--){ ]; ...

  5. (二)linux内核准备及编译

    1. 内核下载地址 linux内核网站,可以拿到最新的和最近的稳定版本内核: https://www.kernel.org/ 通过网站下载压缩包后解压或者使用git下载到本地: git clone h ...

  6. centos查看磁盘空间大小

    查看磁盘空间大小 df -h 查看当前文件夹所有文件大小 du -sh 查看指定文件夹大小 du -h /data 查看指定文件夹下所有文件的大小 du -h /data/ 查看指定文件大小 du - ...

  7. Junit简单使用

    上篇文章也说到了,接口测试我使用的是Junit框架.因为我还是刚刚接触,也还没有深入了解,主要学会了断言的使用.断言是对测试运行结果的判断,如果结果符合要求,程序就会继续执行下去.反之,如果结果和预计 ...

  8. [BOI 2008]Elect 选举

    题目描述 N个政党要组成一个联合内阁,每个党都有自己的席位数. 现在希望你找出一种方案,你选中的党的席位数要大于总数的一半,并且联合内阁的席位数越多越好. 对于一个联合内阁,如果某个政党退出后,其它党 ...

  9. Vue2.0---webpack打包知识点-2

    先贴一篇对vue-cli#2.0进行webpack配置的详细分析: https://zhuanlan.zhihu.com/p/24322005 一.看一下webpack的打包流程 1.package. ...

  10. python 装饰器 第七步:带有参数的装饰器

    #第七步:带有参数的装饰器 #两个基本函数用同一个装饰器装饰 def outer(arg): print(arg) #这是装饰器的代码 def kuozhan(func): print(func) # ...