自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(10)
  • 收藏
  • 关注

原创 C++之区分函数的类型和函数指针的类型

要区分函数指针和函数类型void Fun1(){ std::cout<<"Call Fun1()"<<std::endl;}int Fun2(std::string &str){ std::cout<<"Call Fun2()"<<std::endl;}std::vector<int>& Fun3(const int a){ std::cout<<"Call Fun3()"<<std

2020-06-29 21:55:22 509

原创 C++智能指针unique_ptr的自定义删除器及其lambad表达式实现

问题引出:智能指针默认删除器做的事情太简单啦,仅仅调用delete释放资源可能还不够unique_ptr类://第一个参数智能指针底层资源的类型,第二个参数是删除器,就是下面struct default_delete//在删除资源时会调用删除器的operator()运算符重载,默认调用的是delete ptr.template<class _Ty,class _Dx> // = default_delete<_Ty>class unique_ptr{ //... pri

2020-06-28 21:35:41 4500

原创 C++多线程中访问共享对象错误场景以及使用shared_ptr和weak_ptr强弱指针设计解决方案

子线程访问被主线程delete掉的共享对象class A{public: A(int val = 100){ std::cout<<"A()"<<std::endl; ptr_ = new int; *ptr_ = val; } ~A() { std::cout<<" ~A()"<<std::endl; } void show(){ cout<<"*ptr_ = "<<*ptr_<<endl; }pr

2020-06-28 19:30:13 602

原创 C++智能指针之强、弱智能指针使用以及用弱智能指针解决强智能指针的循环(交叉)引用解决方法

强智能指针:资源每被强智能指针引用一次,引用计数+1,释放引用计数-1,如shared_ptr;弱智能指针:仅仅起到观察作用,观察对象释放还存在,也就是说对象的引用计数是否等于0,如weak_ptr.强智能指针的使用,带来资源的交叉引用问题:class B;class A{public: A(){ std::cout<<"A()"<<std::endl; } ~A() { std::cout<<" ~A()"<<std::e.

2020-06-27 21:39:11 1177

原创 C++智能指针之不带引用计数的智能指针(auto_ptr、scoped_ptr、unique_ptr),以及他们是如何解决浅拷贝问题?

auto_ptr:c++11前就存在于c++库中:int main(){ auto_ptr<int> ptr1(new int); auto_ptr<int> ptr2(ptr1); //拷贝构造ptr2,ptr1底层的裸指针会被置为nullptr,ptr1底层裸指针原来的指向赋值给了ptr2的裸指针 return 0;}1.auto_ptr拷贝构造函数:auto_ptr(auto_ptr& __a) throw() : _M_p.

2020-06-27 20:34:50 223

原创 C++智能指针由来与实现思想以及实现一个简单的智能指针

智能指针的由来和基本思想裸指针:int *p = new int; ,其实就是C风格的指针。裸指针的缺点:1.必须手动释放资源,手动调用delete;2.由于程序逻辑的错误return或者throw异常,导致释放资源的代码delete ptr没有被调用到;3.程序运行过程中,发生异常,导致释放资源的代码没有被调用到。智能指针 : 智能(不管程序运行发生什么意外的情况,一定会帮用户把资源释放掉),不过利用的思想正是对象出作用域,编译器会自动调用对象的析构函数,保证引用的堆空间被正确的释放。数据

2020-06-27 19:51:24 229

原创 ubuntu18.04开机后突然只显示本地环回,不能正常连接网络,之前一直都正常

#暂停网络服务sudo service network-manager stop#删除旧有的网络配置,重新让networkmanager自动配置文件sudo rm -rf /var/lib/NetworkManager/NetworkManager.state#重新启动network服务sudo service network-manager start

2020-06-27 19:14:07 865 1

原创 使用自实现的string和vector类说明std::move和std::forward

在看文章前需要明确一点,引用的重叠:template <typename T>void Func(T &&val){//....}1.当实例化的T的为一个左值引用时,即 T& ++ &&,最终val是一个左值;2.当实例化的T的为一个右值引用时,即 T&& ++ &&,最终val是一个右值;string和vector类的代码:#include <iostream>#include <str

2020-06-27 17:36:19 632

原创 C++11中使用带右值引用参数的拷贝构造函数和赋值运算符重载函数来提升OOP效率

C++11前没有右值引用的说法,涉及到拷贝构造和赋值时,过程如下:简单实现string较完整的代码,初学者可以打开康康#include<iostream>#include <string.h>using namespace std;class String{public: //构造函数String(const char *ptr = nullptr){ std::cout << "String(const char *ptr)" <<

2020-06-27 10:58:44 1202 1

原创 Linux下利用dlopen()+dlsym()实现单元测试中系统调用的mock(2)

还有一种情况,一些系统调用所在的库并不在默认的路径或者调用定义不在默认的库中,此时需要我们指定库的查找路径和库名称,比如mock rt库中的系统调用,具体查看以下代码:#include <dlfcn.h>#include <time.h>const std::string rt_path = "/usr/lib/x86_64-linux-gnu/librt.so";void *create_handler = NULL;// mock timer_createtyped

2020-06-24 15:47:36 368

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除