
C++
文章平均质量分 78
浅学误人
心中有江山的人,岂能快意潇洒。
展开
-
互斥量属性
四、互斥锁属性线程和线程的同步对象(互斥量,读写锁,条件变量)都具有属性。在修改属性前都需要对该结构进行初始化。使用后要把该结构回收。我们用pthread_ mutexattr_init函数对pthread_mutexattr结构进行初始化,用pthread_mutexattr_destroy函数对该结构进行回收。4 名称:: pthread_mutexattr_init/pthread_mutexattr_destroy 功能: ...转载 2022-04-18 14:49:38 · 426 阅读 · 0 评论 -
数组指针和指针数组的区别
数组指针(也称行指针)定义 int (*p)[n];()优先级高,首先说明p是一个指针,指向一个整型的一维数组,这个一维数组的长度是n,也可以说是p的步长。也就是说执行p+1时,p要跨过n个整型数据的长度。如要将二维数组赋给一指针,应这样赋值:int a[3][4];int (*p)[4]; //该语句是定义一个数组指针,指向含4个元素的一维数组。p=a; //将该二维数组的首地址赋给p,也就是a[0]或&a[0][0]p++; //该语句执行过后,也就...转载 2021-07-27 17:24:49 · 252 阅读 · 0 评论 -
不建议用memset初始化指针
先运行一段代码:int main(){ char* f;//不进行赋值,此时无法访问F指针,错误写法,实际不建议这样写code memset(f, 0, sizeof(f)); if(NULL == f) //成立,此时的f变为能够使用的指针,虽然指针为空 printf("f指针为空"); return 0;}一般情况下,给空指针赋值为NULL,初始化一块内存,用memset为0。如果内...原创 2021-07-27 14:43:43 · 5499 阅读 · 0 评论 -
C++ 单例模式
单例可能是最常用的简单的一种设计模式,实现方法多样,根据不同的需求有不同的写法; 同时单例也有其局限性,因此有很多人是反对使用单例的。本文对C++ 单例的常见写法进行了一个总结, 包括懒汉式、线程安全、单例模板等; 按照从简单到复杂,最终回归简单的的方式循序渐进地介绍,并且对各种实现方法的局限进行了简单的阐述,大量用到了C++ 11的特性如智能指针, magic static,线程锁; 从头到尾理解下来,对于学习和巩固C++语言特性还是很有帮助的。本文的全部代码在 g++ 5.4.0 编译器下编译运行...转载 2021-06-21 16:54:31 · 916 阅读 · 0 评论 -
C++ 智能指针 unique_ptr
在《拥抱智能指针,告别内存泄露》中说到了内存泄漏问题,也提到了C++中的智能指针基本原理,今天就来说说类模板unique_ptr。在此之前,先回答读者的一个提问:C语言中该怎么办?有几点建议:编写时尽量遵循函数内申请,函数内释放的原则 注意成对编写malloc和free 使用静态扫描工具,如《pclint检查》 使用内存检测工具,如valgrind相关阅读《常见内存问题》。unique_ptr一个unique_ptr独享它指向的对象。也就是说,同时只有一个unique_ptr指向同转载 2021-06-11 18:01:39 · 199 阅读 · 0 评论 -
pthread线程detached和joinable
线程有两种状态,在任何一个时间点上,线程是可结合的(joinable),或者是分离的(detached)。一个可结合的线程能够被其他线程收回其资源和杀死;在被其他线程回收之前,它的存储器资源(如栈)是不释放的。相反,一个分离的线程是不能被其他线程回收或杀死的,它的存储器资源在它终止时由系统自动释放。 线程的分离状态决定一个线程以什么样的方式来终止自己。在默认情况下线程是非分离状态的,这种情况下,原有的线程等待创建的线程结束。只有当pthread_join()函数返回时,创建的线程才算终止,...原创 2020-06-01 11:22:46 · 588 阅读 · 0 评论 -
libcurl基础知识1
一、LibCurl基本编程框架libcurl是一个跨平台的网络协议库,支持http, https, ftp, gopher, telnet, dict, file, 和ldap 协议。libcurl同样支持HTTPS证书授权,HTTP POST, HTTP PUT, FTP 上传, HTTP基本表单上传,代理,cookies,和用户认证。想要知道更多关于libcurl的介绍,可以到官网http://curl.haxx.se/上去了解,在这里不再详述。在基于LibCurl的程序里,主要采用callbac.转载 2020-05-31 16:04:06 · 299 阅读 · 0 评论 -
dlopen failed总结
1、dlopen 动态库失败原因①动态库位置没有放对地方,dlopen路径错误(可以打印dlerror()函数)解决办法:使用正确路径。run time的so路径一般都在环境变量LD_LIBRARY_PATH中,可以获取该环境变量,或者改变export LD_LIBRARY_PATH=`具体路径`②有不能识别的函数或者标识符,undefine symbol解决办法:考虑是不是C++调用C...原创 2020-03-05 11:37:47 · 13869 阅读 · 1 评论 -
C—动态内存分配之malloc与realloc的区别
在程序的执行期间分配内存时,内存区域中的这个空间称为堆(heap)。还有另一个内存区域,称为栈(stack),其中的空间分配给函数的参数和本地变量。在执行完该函数后,存储参数和本地变量的内存空间就会释放。堆中的内存是由程序员控制的。在分配堆上的内存时,由程序员跟踪所分配的内存何时不再需要,并释放这些空间,以便于以后重用它们。 使用动态内存很明显的好处就是:不需要预先分配存储空间且...原创 2019-11-22 18:02:59 · 682 阅读 · 0 评论 -
C++中的生命周期
类A,含构造函数和析构函数普通函数fun,函数体里新建了类A的局部自动对象FunObj和局部静态对象InStaObjmain方法新建了类A的局部自动对象MainObj,调用fun方法外面新建了A的的外部静态对象ExStaObj和外部对象GblObj[cpp]view plaincopy#include<iostream>#include<string....原创 2019-10-22 17:14:19 · 1406 阅读 · 0 评论 -
C++和java中生产者消费者模型
下面用代码简单实现生产者消费者模型:主要是用的是线程、线程锁、线程条件变量。先使用c++的代码实现:#include <jni.h>#include <string>#include "pthread.h"#include "AndroidLog.h"pthread_t thread;void *normalCallBack(void * data)...原创 2019-09-24 23:48:49 · 231 阅读 · 0 评论 -
vsnprintf
函数简介头文件:#include <stdio.h>函数声明:int _vsnprintf(char* str, size_t size, const char* format, va_list ap);参数说明 char *str [out],把生成的格式化的字符串存放在这里. size_t size [in], str可接受的最大字符数[1...原创 2019-08-12 14:44:16 · 8936 阅读 · 0 评论 -
函数声明后面的const用法
void function() const{}通常我们会看到一些函数声明后面会跟着一个const,这个const是做什么的呢?看一下下面的例子,就知道了。直接在编译前,就会提示下面的两个错误// test1107.cpp : 定义控制台应用程序的入口点。//#include "stdafx.h"#include <iostream>using name...转载 2019-05-07 11:36:09 · 118 阅读 · 0 评论