智能指针auto_ptr的解析
智能指针(smart pointer)是一个c++中必须去探讨的一个重点知识,它代理了原有的“裸指针”的一些行为,并添加了很多特性。
auto_ptr是为了解决资源泄漏的问题提供的一个智能指针类模板(注意:这只是一种简单的智能指针且很不完善,不推荐使用)
先用例子说明下
int main ()
{
auto ptr< class_need_resource > p...
不完全类型检测 “typedef char type_must_be_complete[ sizeof(T)? 1: -1 ];”
最近在关注Boost库中智能指针的相关知识,剖析到下面的一段代码,在头文件checked_delete.hpp中的用于释放空间的类模板函
checked_array_delete(T * x);:
template<class T> inline void checked_array_delete(T * x)
{
typedef char type_must_be...
可变参函数对变参的取值工具(va_start,va_arg,va_end)
本文主要介绍va_start,va_arg,va_end的使用及原理。在以前的一篇帖子www.cnblogs.com/hanyonglu/archive/2011/04/19/2020738.html详解中曾使用到va_start和va_end这两个宏,但对它们也只是泛泛的了解。
介绍这两个宏之前先看一下C中传递函数的参数时的用法和原理:
1.在C中,当我们无法列出传递函数的所有实参的类...
Boost库中的智能指针scoped_ptr,scoped_array
一 . boost库中smart_ptr产生的原因,所发挥的作用
我们知道,为了更安全使用指针,不再让C/C++程序猿为了代码的内存管理而苦恼,VC和VS都带有智能指针auto_ptr供程序猿调用。如果还没了解建议先了解auto_ptr源代码,下面是之前对它的解析boke:
智能指针auto_ptr的解析
可无论是vc下的auto_ptr还是vs下的auto_ptr都存在设计上的缺陷,vs...
Boost库的智能指针shared_ptr剖析
之前的博客对Boost库的智能指针诞生的原因它们的作用,VS 和 VC下auto_ptr的不足,还解析了vc下的auto_ptr,以及Boost库的scoped_ptr和scoped_array这两个兄弟智能指针,可以查看之前的博客,今天我们直接入手shared_ptr。
shared_ptr简介
shared.ptr 是一个最像指针的“智能指针”,是boost.smart.ptr 库中最...
STL中容器list的sort方法详解
**
List 不能使用STL提供的算法 sort() , 必须使用自己定义的sort() member function,因为STL算法sort()只接受RamdonAccessIterator,它的实现代码如下,是一个quick sort;
**
list::sort的代码如下(sgi stl):
template <class _Tp, class _Alloc> ...
虚拟地址相关问题明了解释
早期的内存分配机制
在早期的计算机中,要运行一个程序,会把这些程序全都装入内存,程序都是直接运行在内存上的,也就是说程序中访问的内存地址都是实际的物理内存地址。当计算机同时运行多个程序时,必须保证这些程序用到的内存总量要小于计算机实际物理内存的大小。
那当程序同时运行多个程序时,操作系统是如何为这些程序分配内存的呢?下面通过实例来说明当时的内存分配方法:
某台计算机总的内存大小是128M,现...
腾讯内推三面经验分享
腾讯2019届C/C++实习生招聘,本人内推,到现在电话面试了三次(已经凉凉),写篇面试经验吧!
总体来说,面试所问的问题有前有深,还是比较注重基础知识和底层的东西的,包括网络,I/O,STL,数据结构等 三次面试问题会有重复的,重复的我就不再列出来
一面
没有让自我介绍,大多电话面也不会很尴尬的让你介绍自己,都会选择问你的大学,学习生活开始慢慢进...
TCP的三次握手四次分手详解
tcp的三次握手详解
1.客户端向服务器端发送连接请求,生成syn=1的状态包和随机顺序包seq=#.syn=1表示请求连接并且进入syn_send状态。
2.服务器接收到syn=1,生成确认包ack_number=seq+1和seq=#随机数顺序包,并且还要回复一个syn=1的同步包,再随机生成顺序包,并发出ack=1确认包,进入syn_recive状态。
3.客户端接收到以后确认ack
字符串常量,指针,数组,[],*各关系梳理
字符串常量,指针,数组各关系梳理
1)在C语言中没有专门的字符串类型,但存在字符串常量,字符串常量存放在常量区,不可修改;
例:char* str = “woshini”;
这是申请一个字符串常量“woshini”,双引号作用是返回所开辟空间(常量区)的首地
址,str指向这个字符串常量,不可修改;
char dest[] = “woshini”;
看到
I/O复用的不同机制间区别(select/poll/epoll)
转载至:http://blog.csdn.net/u012570105/article/details/52079765
select,poll,epoll都是IO多路复用的机制。I/O多路复用就通过一种机制,可以监视多个描述符,一旦某个描述符就绪(一般是读就绪或者写就绪),能够通知程序进行相应的读写操作。但select,poll,epoll本质上都是同步I/O,因为他们都需要在读写事件
非常好的一篇对linux信号(signal)的解析 (转载)
Linux信号(signal) 机制分析
转载至:https://www.cnblogs.com/hoys/archive/2012/08/19/2646377.html
【摘要】本文分析了Linux内核对于信号的实现机制和应用层的相关处理。首先介绍了软中断信号的本质及信号的两种不同分类方法尤其是不可靠信号的原理。接着分析了内核对于信号的处理流程包括信号的触发/注册/执行及注销等。
Libevent剖析(一):建立对Libevent的宏观认知如何运作等
一)Libevent是什么:
我们应该都已经了解过linux服务器程序必须处理的三类事件:I/O事件,信号事件,定时事件。
而如何去编写程序统一处理这三类事件,同时保证可以移植到其他操作系统(因为不同的操作系统可能会具有不
同的I/O复用的方式,比如Solaris的dev/poll,linux的epoll,FreeBSD的Kqueue等),并支持并发编程,如何去
协同等等,如果每个服务器程
Libevent解析(二)从简单使用代码剖析建立对Libevent的认识主线
Libevent解析我的上篇博客从整体宏观流程,对它进行的简单易懂的一个解释,而本篇我想从一个Libevent实例入手,让大家能从整体上去把握软件逻辑和结构,代码如下:
#include
#include //Libevent安装后提供的核心库函数
#include
using namespace std;
void signal_cb( int f
查看 mac 下文件路径
出处:https://blog.csdn.net/u014005316/article/details/54912375用mac的同学应该知道,在mac上无法直观的看见文件的具体路径。不像在Windows上一目了然。在mac上查看文件路径的方法有很多,个人比较喜欢以下这种方式:打开终端,将文件拖进终端,就会显示文件的具体路径,复制路径即可!...
pageEncoding和contentType小结
JSP指令标签中<%@ page contentType="text/html;charset=GB2312"%>这句有什么用途?关于JSP页面中的pageEncoding和contentType两种属性的区别: pageEncoding是jsp文件本身的编码 contentType的charset是指服务器发送给客户端时的内容编码 JSP要经过两次的“编码”,第一阶段会用pag...
今日推荐
周排行