- 博客(32)
- 资源 (4)
- 收藏
- 关注
原创 std::make_shared和new初始化智能指针的区别
当在函数的实参里初始化智能指针,使用new初始化有发生异常安全性的风险,如 function_a(std::shared_ptr ptr1(new int(100)), function_b());编译器可能产生代码: 1先new对象,2再执行函数function_b,3最后将new对象的指针赋给智能指针,如果第2步 function_b发生异常退出,将导致内存泄漏。3、对象内存被延迟回收:当使用了弱指针weak_ptr引用shared_ptr时,使用make_shared初始化因为控制块和对象都在。
2023-09-06 14:27:10
1579
原创 std::unique_ptr智能指针定制删除器在连接池中的应用
用智能指针管理连接池(如数据库连接池、redis连接池),当智能指针离开作用域时,调用定制的删除器,删除器中调用指定的函数,并不是将连接断开,而是将连接放进一个容器中。当需要获取连接时,从连接池中获取一个空闲的连接。目录自定义删除器scoped_ptr.hapi_redis.hmain.cpp自定义删除器scoped_ptr.h#ifndef SCOPED_PTR_H_INCLUDED#define SCOPED_PTR_H_INCLUDED#include <i
2021-11-17 17:11:08
927
原创 模板类的对象的嵌套调用和构造函数调用顺序分析
在最近的c++项目中,框架里频繁使用模板类,并在类中有类对象指针的逐级传递和相互调用,逻辑关系复杂,因此写一个简单的例子便于理解框架。
2019-11-29 16:22:16
711
原创 基于Item的协同过滤算法实践(最简单的在线电影推荐系统)
上一篇文章《基于用户的协同过滤算法实践》中,基于用户的相似度生成推荐列表,本文将基于Item的相似度阐述。 1 相似度基于物品的协同过滤算法(简称ItemCF)给用户推荐那些和他们之前喜欢的物品相似的物品。不过ItemCF不是利用物品的内容计算物品之间相似度,而是利用用户的行为记录。该算法认为,物品A和物品B具有很大的相似度是因为喜欢物品A的用户大都也喜欢物品B。这里蕴含一个假设,...
2019-01-17 17:12:44
1536
2
原创 基于用户的协同过滤算法实践(最简单的在线电影推荐系统)
协同过滤的原理参考文章:http://www.cnblogs.com/ECJTUACM-873284962/p/8729010.html#_label0_21. 协同过滤的简介 关于协同过滤的一个最经典的例子就是看电影,有时候不知道哪一部电影是我们喜欢的或者评分比较高的,那 么通常的做法就是问问周围的朋友,看看最近有什么好的电影推荐。在问的时候,都习惯于问跟自己口味差不...
2019-01-15 17:17:29
6163
1
原创 C++设计模式之一:观察者模式
观察者模式定义了对象间的依赖关系,以至于一个对象的改变,依赖它的对象都会收到通知。求职者订阅了某职位发布网站, 当有何时的职位出现时, 他们会收到通知.#include <iostream>#include <string>#include <list>#include <functional>//消息类class JobPost...
2018-08-31 16:50:49
254
原创 epoll多进程服务器架构模型
epoll 1进程(listen) + n进程(accept+epoll_wait+处理) 模型1、代表开源产品:nginx2、基本原理:(依据nginx的设计分析)1)master进程监听新连接的到来,并让其中一个worker进程accept。这里需要处理惊群效应问题,详见nginx的accept_mutex设计2)worker进程accept到fd之后,把fd注册到到本进程的e...
2018-08-07 16:08:57
998
原创 Linux信号量使用心得总结(system)
应用程信号量有Posix信号量和SYSTEM信号,本文讨论的是SYSTEM V信号量,SYSTEM V信号量是SYSTEM V进程间通信的组成部分。SYSTEM V进程间通信包括:信号量,消息队列,共享内存。函数包括如下: 先看一个有问题的代码,以下代码中,目的是实现父进程和子进程的对临界区资源访问的互斥,使对临界区资源的操作具有原子性,但实际运行中,并未实现父进程和子进程...
2018-08-07 15:30:40
1332
转载 C/C++开源库大全
【本文系外部转贴,原文地址:http://coolshell.info/c/c++/2014/12/13/c-open-project.htm】留作存档下次造轮子前先看看现有的轮子吧 值得学习的C语言开源项目- 1. Webbench Webbench是一个在linux下使用的非常简单的网站压测工具。它使用fork()模拟多个客户端同时访问我们设定的URL,测试网站在压力下工作...
2018-07-17 09:34:08
897
原创 String函数功能总结
1、find原型如下:(1)size_t find (const string& str, size_t pos = 0) const; //查找对象--string类对象(2)size_t find (const char* s, size_t pos = 0) const; //查找对象--字符串(3)size_t find (const char* s, siz
2017-05-23 14:16:26
746
原创 map用法
1、map的基本操作函数: C++ Maps是一种关联式容器,包含“关键字/值”对 begin() 返回指向map头部的迭代器 clear() 删除所有元素 count() 返回指定元素出现的次数 empty() 如果map为空则返回true e
2017-05-22 17:03:01
442
原创 list_head数据结构分析
1、list_head结构体的定义struct list_head { struct list_head *next, *prev;};list_head结构包含两个指针成员,一个用于指向前一个节点,next用于指向下一个节点。2、LIST_HEAD_INIT宏定义#define LIST_HEAD_INIT(name) { &(name), &(name) }
2016-06-05 19:39:34
962
原创 C++类和动态内存分配(1)
C++中的类和动态内存分配,关键的问题如下:1、调用构造函数的问题,创建对象时调用默认构造函数还是复制构造函数还是其他自定义构造函数?2、需不需要自定义复制构造函数和重载赋值操作符;3、类中成员的内存分配是怎样的,静态成员存储在哪里?4、采用动态内存分配时要注意哪些问题?5、返回对象及const问题;示例代码如下所示;/* * string1.h * * Created on: 2016年
2016-06-04 22:06:29
1127
原创 Linux线程同步------屏障
屏障是Linux中协调多个线程并行工作的同步机制,屏障允许每个线程等待直到所有的合作线程到达某一点,然后继续从该点执行,pthread_join是一种屏障但只允许一个线程等待,pthread_barrier允许任意数量的线程等待!
2014-11-06 15:39:46
2336
原创 Kset和Kobject
/** * struct bus_type_private - structure to hold the private to the driver core portions of the bus_type structure. * * @subsys - the struct kset that defines this bus. This is the main kobjec
2014-10-27 21:44:22
892
原创 Linux输入子系统框架分析(1)
在Linux下的输入设备键盘、触摸屏、鼠标等都可以用输入子系统来实现驱动。输入子系统分为三层,核心层和设备驱动层,事件层。核心层和事件层由Linux输入子系统本身实现,设备驱动层由我们实现。我们在设备驱动层将输入事件上报给核心层input.c,核心层找到匹配的事件层,将事件交给事件层处理,事件层处理完后传递到用户空间。我们最终要搞清楚的是在用户空间调用open和read最终在内核中是怎样处理的
2014-07-08 11:06:10
1438
原创 strcpy函数执行解析
实参传递给形参的过程是将实参拷贝一份传递给形参。//============================================================================// Name : Pointer2.cpp// Author : xie// Version :// Copyright : Your copyr
2013-08-28 15:04:42
851
1
原创 Android常用UI布局的介绍
Ø为了适应各种界面风格,Android提供了5种布局,这5种布局分别是:FrameLayout(框架布局)、LinearLayout(线性布局)、RelativeLayout(相对布局)、TableLayout(表格布局)、AbsoluteLayout(绝对布局)等常用属性介绍ØAndroid表示单位长度的方式通常有三种表示方式。Øpx:表示屏幕实际的象素。例如
2013-08-22 22:17:16
1248
原创 Java小项目--坦克大战(version1.0)
Java小项目--坦克大战这个小项目主要是练习j2se的基础内容和面向对象的思想。项目实现了基本的简单功能,我方一辆坦克,用上下左右键控制移动方向,按F键为发射炮弹,敌方有10辆坦克,我方阵亡或者敌方挂光了游戏就结束了。用大小实心圆表示坦克和炮弹。这是最初版本,界面不够友好图形很土鳖,没有网络功能。在后续版本中会添加更炫的图片和网络功能,并加入聊天室,可以局域网内聊天和对战。效果图:
2013-08-16 21:51:14
1770
原创 初识Java--线程同步(2)
本文讲述Java中的线程同步和生产者消费者问题,其中主要涉及线程同步和wait()、notify()方法的用法。wait和notify方法只能用在线程同步中,wait和notify是object的方法,因此任何对象都能调用,当一个线程中调用wait方法时会将该线程阻塞,将cpu资源让给其他线程,关键的一点是在线程阻塞前会将持有的锁释放,这一点是和sleep方法的很大区别,sleep方法使线程睡
2013-08-09 21:20:22
1174
原创 初学Java--线程同步(1)
当在一个方法中用线程同步加锁,任何时刻只能运行一个线程调用这个方法,但是方法中加锁的变量可以在其他普通的 方法中对这个变量进行读写?现贴出一段代码说明:public class lesson909 implements Runnable { int b=100,a=10; public synchronized void m1() throws Exception{ b=1000;
2013-08-08 21:33:55
1063
原创 Linux平台设备驱动(1)
首先来解释下平台设备驱动所涉及的一些结构:struct resource { resource_size_t start; //该平台设备所占用的资源起始地址 resource_size_t end; //结束地址 const char *name; //名字 unsigned long flags; //资源类型 struct resource *pare
2013-08-05 20:23:17
1219
原创 Linux设备驱动模型(1)
在Linux内核的说明文档里有一些关于驱动模型的说明文件,首先解读一下第一个文件bus.txt:struct bus_type { char * name; structsubsystem subsys; structkset drivers; structkset
2013-08-03 20:44:31
942
原创 Makefile的静态模式
在makefile中,多个目标可以共用一个规则,静态模式可以更容易的定义多目标规则。语法格式如下: : : 例子:objects = foo.o bar.o all: $(objects) $(objects): %.o: %.c $(CC) -c $$(objects)即为foo.o bar.o;%.o为所有.o文
2013-08-02 20:50:32
1186
原创 Java的冒泡排序和二分法查找
最近在学Java,三大面向对象语言c++,Java,c#各有各的优点,其实最重要的是面向对象的编程思想,掌握了思想,再学其他语言无非就是语法不同了,编程思想都是类似的。现在贴出一段程序,先用冒泡法对日期进行排序,然后用二分法查找日期。public class lesson409 { public static void main(String args []) { Date [] da
2013-08-01 21:30:50
1131
原创 Qt中的指南针表盘的介绍
Qt的第三方qwt控件中提供了compass,如下图所示:现在要实现如下效果:实现代码如下: QwtCompass *compass = new QwtCompass(this); //新建一个compass compass->setLineWidth(4); compass->setScaleComponent
2013-05-12 20:25:58
4873
原创 Linux的温湿度传感器DHT11驱动
今天写了个DHT11的驱动,实现了温湿度的测量,最终测的当时的温度为26摄氏度,80%的湿度,但根据天气预报当时的温度为22摄氏度,可能误差有点大。往传感器呵气,温度会上升到33度,但是上升的很慢。感觉传感器不灵敏。 源码迟点会发布。
2013-05-08 20:30:50
3688
4
原创 linux的i2c驱动中的函数和数据结构的分析
在i2c驱动中有很多函数和数据结构,很多一时难以理解,所以写下本文共同学习。一、i2c_set_clientdata函数 在probe方式的I2C驱动中的probe函数中经常出现i2c_set_clientdata函数,一直很不解这个函数什么意思,后来查看内核源码,发现了一点大家都知道的秘密。这是某个I2C设备驱动中的probe函数,选取了部分代码:struct i2
2013-05-07 19:11:34
6602
原创 i2c驱动中的传输函数
I2C设备驱动编写中要用到信息传输的函数,有很多种,以下以写消息为例。一、i2c_smbus_write_byte_data 这是在内核中拷贝的该函数的实现代码,value为字节数据,将value写如client代表的设备。函数中的i2c_smbus_xfer最终调用了smbus_xfer函数进行消息的写入。每次传送均为一个字节。/** * i2c_smbus_writ
2013-05-07 15:56:18
3800
原创 i2c驱动之at24c08(1)
/**该驱动为new style方式*驱动安装后,输入命令创建设备节点:mknod /dev/at24c08 c 250 1*需在内核中的mach-mini2440.c中添加板级信息注册这个i2c设备,*且注册的设备名必须和本文件中id_table的设备名一致;在mach-mini2440.c中添加如下代码,并重新编译内核0x50为at24c08设备的地址,"at24c08"为在板级信
2013-05-06 22:29:16
2260
sqlite3数据库arm版库文件和头文件
2013-05-20
单片机程序:60秒计时器,精确到微秒
2010-11-30
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人