C++小作业
前言:long long time ago,老大留了点小作业,一直忘了写…偷偷补上
小作业目录
- unique_ptr vs shared_ptr
- unique_ptr
- shared_ptr
- publisher/subscriber 1?
- boost::bind
- std::bind
- this? _1?
- TopicContextPtr?std::move
unique_ptr vs shared_ptr
其实是智能指针的应用。避免内存泄漏或者错误引用造成的程序崩溃。
unique_ptr
-
C++14的时候,尽量使用make_unique函数创建unique_ptr实例;
-
std::unique_ptr对象可以作为函数返回值使用,因为函数返回值是个右值,复制给其他变量时,通过移动语义来实现。
-
std::unique_ptr对象可以方便地管理动态内存。但是前提是该对象是建立在栈上的,千万不要使用动态分配的类对象,那么将在堆上,其行为与普通指针变得一样。
-
使用std::unique_ptr可能犯的两个错误是:
// 千万不要用同一个资源来初始化多个std::unique_ptr对象 Resource *res = new Resource; std::unique_ptr<Resource> res1(res); std::unique_ptr<Resource> res2(res);// 不要混用普通指针与智能指针 Resource *res = new Resource; std::unique_ptr<Resource> res1(res); delete res;
-
std::unique_ptr默认使用new和delete运算符来分配和释放内存
-
其他几个常用的方法:
- release():返回该对象所管理的指针,同时释放其所有权;
- reset():析构其管理的内存,同时也可以传递进来一个新的指针对象;
- swap():交换所管理的对象;
- get():返回对象所管理的指针;
- get_deleter():返回析构其管理指针的调用函数。
shared_ptr
- std::shared_ptr与std::unique_ptr的主要区别在于前者是使用引用计数的智能指针。引用计数的智能指针可以跟踪引用同一个真实指针对象的智能指针实例的数目。这意味着,可以有多个std::shared_ptr实例可以指向同一块动态分配的内存,当最后一个引用对象离开其作用域时,才会释放这块内存。
- 还有一个区别是std::shared_ptr不能用于管理C语言风格的动态数组
publisher/subscriber 1?
boost::bind
引用一篇文章
std::bind
引用一篇文章