<?xml version="1.0" encoding="utf-8" ?><rss version="2.0"><channel><title><![CDATA[oshirdey的专栏]]></title><description><![CDATA[]]></description><link>https://blog.youkuaiyun.com/oshirdey</link><language>zh-cn</language><generator>https://blog.youkuaiyun.com/</generator><copyright><![CDATA[Copyright &copy; oshirdey]]></copyright><item><title><![CDATA[循环引用-智能指针的死穴之一]]></title><link>https://blog.youkuaiyun.com/oshirdey/article/details/44938187</link><guid>https://blog.youkuaiyun.com/oshirdey/article/details/44938187</guid><author>oshirdey</author><pubDate>Wed, 08 Apr 2015 11:27:00 +0800</pubDate><description><![CDATA[智能指针的实现思路也体现了C++基于对象的原则，对象应该为自己管理的资源负责，包括资源的分配与释放，而且最好将资源的释放与分配搞的自动化一点，典型的实现方法就是在构造函数里分配资源，在析构函数里释放资源，这样当其他程序员在使用这个对象时，该对象的资源问题几乎不用额外的操心，即优雅又方便
        然后如此完美的东西,也有其不容忽视的地方,直接上代码:
// share_ptr.cpp :]]></description><category></category></item><item><title><![CDATA[C++复制对象时勿忘每一部分]]></title><link>https://blog.youkuaiyun.com/oshirdey/article/details/44917163</link><guid>https://blog.youkuaiyun.com/oshirdey/article/details/44917163</guid><author>oshirdey</author><pubDate>Tue, 07 Apr 2015 10:34:31 +0800</pubDate><description><![CDATA[确保两点: 1 复制所有的成员变量 2 调用所有基类的copy函数
class Customer
{
public:
	explicit Customer(const tstring _name,const tstring _lastTransaction)
		:m_sName(_name), m_sLastTransaction(_lastTransaction)
	{
		Ou]]></description><category></category></item><item><title><![CDATA[虚函数中“虚”的理解]]></title><link>https://blog.youkuaiyun.com/oshirdey/article/details/44904735</link><guid>https://blog.youkuaiyun.com/oshirdey/article/details/44904735</guid><author>oshirdey</author><pubDate>Mon, 06 Apr 2015 19:49:02 +0800</pubDate><description><![CDATA[1、首先回顾一下虚函数的概念
虚函数：不代表一定需要子类去实现，而是可以通过基类的指针调用子类的此函数。
纯虚函数：一定需要子类去实现它，它定义的仅仅是一组行为，拥有纯虚函数的类即为抽象类，只能当做基类，无法实例化。


2、为什么叫“虚”函数呢
正是这个函数调用的不可预测性，而这种不可预测性即函数的调用在编译阶段无法确定，待执行时才能确定函数调用的真正地址


       3]]></description><category></category></item><item><title><![CDATA[C++四种类型转换总结]]></title><link>https://blog.youkuaiyun.com/oshirdey/article/details/41516403</link><guid>https://blog.youkuaiyun.com/oshirdey/article/details/41516403</guid><author>oshirdey</author><pubDate>Wed, 26 Nov 2014 15:26:54 +0800</pubDate><description><![CDATA[const_cast，字面上理解就是去const属性。
static_cast，命名上理解是静态类型转换。如int转换成char。
dynamic_cast，命名上理解是动态类型转换。如子类和父类之间的多态类型转换。
reinterpret_cast，仅仅重新解释类型，但没有进行二进制的转换。
4种类型转换的格式，如：TYPE B = static_cast(TYPE)(a)。
cons]]></description><category></category></item><item><title><![CDATA[排序算法总结]]></title><link>https://blog.youkuaiyun.com/oshirdey/article/details/41251585</link><guid>https://blog.youkuaiyun.com/oshirdey/article/details/41251585</guid><author>oshirdey</author><pubDate>Tue, 18 Nov 2014 19:24:39 +0800</pubDate><description><![CDATA[1 冒泡排序:
 void BubbleSort(int*p,int len){	
	//冒泡方式二：当某一次遍历没有发生任务数据交互时，说明已经排序好了
     bool flag = true;
    int k = len;  while (flag)
    {
	flag = false;
	for(int j=0 ; j<k-1 ; j++)
	{
	   if]]></description><category></category></item><item><title><![CDATA[VS2010,原来还有这些快捷键,果断记下来!]]></title><link>https://blog.youkuaiyun.com/oshirdey/article/details/40830495</link><guid>https://blog.youkuaiyun.com/oshirdey/article/details/40830495</guid><author>oshirdey</author><pubDate>Wed, 05 Nov 2014 20:22:14 +0800</pubDate><description><![CDATA[一直觉得VS的快捷键跟eclipse比起来差远了,那些因为不知道还有如此多有效却不知的快捷键阿
        1. 检查括号匹配(在左右括号间切换): Ctrl +]
        2. 选中从光标起到行首(尾)间的代码: Shift + Home(End)
        3、注释选定块：Control+K,Control+C
        4、取消注释块：Control+K,Co]]></description><category></category></item><item><title><![CDATA[TCP三次握手和四次挥手详解]]></title><link>https://blog.youkuaiyun.com/oshirdey/article/details/40677509</link><guid>https://blog.youkuaiyun.com/oshirdey/article/details/40677509</guid><author>oshirdey</author><pubDate>Sat, 01 Nov 2014 09:28:15 +0800</pubDate><description><![CDATA[TCP头：






Source Port 
(0 - 65535)



Destination Port
(0 - 65535)





Sequence Number
(0 - 4294967295)





Acknowledgement Number
(0 - 4294967295)



Data
Offset]]></description><category></category></item><item><title><![CDATA[InterLockedIncrement and InterLockedDecrement函数原理]]></title><link>https://blog.youkuaiyun.com/oshirdey/article/details/40457561</link><guid>https://blog.youkuaiyun.com/oshirdey/article/details/40457561</guid><author>oshirdey</author><pubDate>Sat, 25 Oct 2014 21:47:54 +0800</pubDate><description><![CDATA[实现数的原子性加减。什么是原子性的加减呢？

举个例子：如果一个变量 Long value =0;

首先说一下正常情况下的加减操作：value+=1；

1：系统从Value的空间取出值，并动态生成一个空间来存储取出来的值；

2：将取出来的值和1作加法，并且将和放回Value的空间覆盖掉原值。加法结束。


如果此时有两个Thread ，分别记作threadA，threa]]></description><category></category></item><item><title><![CDATA[do...while(0)的妙用]]></title><link>https://blog.youkuaiyun.com/oshirdey/article/details/40406079</link><guid>https://blog.youkuaiyun.com/oshirdey/article/details/40406079</guid><author>oshirdey</author><pubDate>Thu, 23 Oct 2014 22:20:26 +0800</pubDate><description><![CDATA[1. do...while(0)消除goto语句。
通常，如果在一个函数中开始要分配一些资源，然后在中途执行过程中如果遇到错误则退出函数，当然，退出前先释放资源，我们的代码可能是这样：
version 1


bool Execute()
{
   // 分配资源
   int *p = new int;
   bool bOk(true);

   // 执行并进行错误处理]]></description><category></category></item><item><title><![CDATA[Sizeof与Strlen的区别与联系]]></title><link>https://blog.youkuaiyun.com/oshirdey/article/details/40227307</link><guid>https://blog.youkuaiyun.com/oshirdey/article/details/40227307</guid><author>oshirdey</author><pubDate>Sat, 18 Oct 2014 23:17:27 +0800</pubDate><description><![CDATA[1、 sizeof：
sizeof（...），是一个运算符，定义为unsigned in类型，其大小在编译期间决定的，参数可以是基本数据类型、数组、指针、对象、函数等。
功能：获得保证能容纳实现所建立的最大对象的字节大小。
   数组：数组所占空间字节数：
   指针：存储该指针所用的空间大小
   对象：该对象所占内存空间大小
二、strlen：
     strlen(...)是]]></description><category></category></item><item><title><![CDATA[关于stringstream的学习]]></title><link>https://blog.youkuaiyun.com/oshirdey/article/details/40208955</link><guid>https://blog.youkuaiyun.com/oshirdey/article/details/40208955</guid><author>oshirdey</author><pubDate>Sat, 18 Oct 2014 10:40:01 +0800</pubDate><description><![CDATA[库定义了三种类：istringstream、ostringstream和stringstream，分别用来进行流的输入、输出和输入输出操作。另外，每个类都有一个对应的宽字符集版本。简单起见，我主要以stringstream为中心，因为每个转换都要涉及到输入和输出操作。
注意，使用string对象来代替字符数组。这样可以避免缓冲区溢出的危险。而且，传入参数和目标对象的类型被自动推导出来，即使使用了]]></description><category></category></item><item><title><![CDATA[strcpy和memcpy的区别]]></title><link>https://blog.youkuaiyun.com/oshirdey/article/details/39678053</link><guid>https://blog.youkuaiyun.com/oshirdey/article/details/39678053</guid><author>oshirdey</author><pubDate>Mon, 29 Sep 2014 23:18:40 +0800</pubDate><description><![CDATA[strcpy和memcpy都是标准C库函数，它们有下面的特点。
strcpy提供了字符串的复制。即strcpy只用于字符串复制，并且它不仅复制字符串内容之外，还会复制字符串的结束符。

已知strcpy函数的原型是：char* strcpy(char* dest, const char* src);

返回值是char*是为了链式表达。

memcpy提供了一般内存的复制。即memc]]></description><category></category></item><item><title><![CDATA[debug版本运行没有问题，而release版本总是报错？]]></title><link>https://blog.youkuaiyun.com/oshirdey/article/details/38794951</link><guid>https://blog.youkuaiyun.com/oshirdey/article/details/38794951</guid><author>oshirdey</author><pubDate>Sun, 24 Aug 2014 11:47:51 +0800</pubDate><description><![CDATA[下面将讲述一下我的几点经验，看看是不是其中之一：

1. 变量。
大家都知道，debug跟release在初始化变量时所做的操作是不同的，debug是将每个字节位都赋成0xcc(注1)，而release的赋值近似于随机(我想是直接从内存中分配的，没有初始化过)。这样就明确了，如果你的程序中的某个变量没被初始化就被引用，就很有可能出现异常：用作控制变量将导致流程导向不一致；用作数组下标将会使程]]></description><category></category></item><item><title><![CDATA[TCP可靠传输机制]]></title><link>https://blog.youkuaiyun.com/oshirdey/article/details/38640337</link><guid>https://blog.youkuaiyun.com/oshirdey/article/details/38640337</guid><author>oshirdey</author><pubDate>Sun, 17 Aug 2014 17:04:26 +0800</pubDate><description><![CDATA[TCP提供一种面向连接的、可靠的字节流服务。面向连接意味着两个使用TCP的应用（通常是一个客户和一个服务器）在彼此交换数据包之前必须先建立一个TCP连接。这一过程与打电话很相似，先拨号振铃，等待对方摘机说“喂”，然后才说明是谁。在一个TCP连接中，仅有两方进行彼此通信。广播和多播不能用于TCP。

TCP通过下列方式来提供可靠性：

1．面向字节流和缓存机制：应用数据被分割成TCP认为最适]]></description><category></category></item><item><title><![CDATA[浅析TCP字节流与UDP数据报的区别]]></title><link>https://blog.youkuaiyun.com/oshirdey/article/details/38467391</link><guid>https://blog.youkuaiyun.com/oshirdey/article/details/38467391</guid><author>oshirdey</author><pubDate>Sun, 10 Aug 2014 10:05:39 +0800</pubDate><description><![CDATA[“TCP是一种流模式的协议，UDP是一种数据报模式的协议”，这句话相信大家对这句话已经耳熟能详~但是，“流模式”与“数据包模式”在编程的时候有什么区别呢?以下是我的理解，仅供参考!

1、TCP

打个比方比喻TCP，你家里有个蓄水池，你可以里面倒水，蓄水池上有个龙头，你可以通过龙头将水池里的水放出来，然后用各种各样的容器装(杯子、矿泉水瓶、锅碗瓢盆)接水。

上面的例子中，往水池里倒]]></description><category></category></item><item><title><![CDATA[深入理解 Java中的 流 (Stream)]]></title><link>https://blog.youkuaiyun.com/oshirdey/article/details/38422307</link><guid>https://blog.youkuaiyun.com/oshirdey/article/details/38422307</guid><author>oshirdey</author><pubDate>Thu, 07 Aug 2014 17:27:41 +0800</pubDate><description><![CDATA[首先，流是什么？
流是个抽象的概念，是对输入输出设备的抽象，Java程序中，对于数据的输入/输出操作都是以“流”的方式进行。设备可以是文件，网络，内存等。

流具有方向性，至于是输入流还是输出流则是一个相对的概念，一般以程序为参考，如果数据的流向是程序至设备，我们成为输出流，反之我们称为输入流。
可以将流想象成一个“水流管道”，水流就在这管道中形成了，自然就出现了方向的概念。

当程序]]></description><category></category></item><item><title><![CDATA[Java中transient关键字的应用]]></title><link>https://blog.youkuaiyun.com/oshirdey/article/details/38366989</link><guid>https://blog.youkuaiyun.com/oshirdey/article/details/38366989</guid><author>oshirdey</author><pubDate>Mon, 04 Aug 2014 11:42:16 +0800</pubDate><description><![CDATA[今天跟JDK源码的时候发现transient ,感觉从来没见过,于是用google查了一下.
  Java语言的关键字，用来表示一个域不是该对象串行化的一部分。当一个对象被串行化的时候，transient型变量的值不包括在串行化的表示中，然而非transient型的变量是被包括进去的。
 下面我们查创建一个LoginFile的类:
public class LoginFile impleme]]></description><category></category></item><item><title><![CDATA[Android开发-android架构]]></title><link>https://blog.youkuaiyun.com/oshirdey/article/details/38238405</link><guid>https://blog.youkuaiyun.com/oshirdey/article/details/38238405</guid><author>oshirdey</author><pubDate>Mon, 28 Jul 2014 22:30:22 +0800</pubDate><description><![CDATA[原文地址：]]></description><category></category></item><item><title><![CDATA[Java设计模式（三）-装饰者模式]]></title><link>https://blog.youkuaiyun.com/oshirdey/article/details/38169093</link><guid>https://blog.youkuaiyun.com/oshirdey/article/details/38169093</guid><author>oshirdey</author><pubDate>Sun, 27 Jul 2014 12:04:35 +0800</pubDate><description><![CDATA[我们都知道，可以使用两种方式给一个类或者对象添加行为。

        一是使用继承。继承是给一个类添加行为的比较有效的途径。通过使用继承，可以使得子类在拥有自身方法的同时，还可以拥有父类的方法。但是使用继承是静态的，在编译的时候就已经决定了子类的行为，我们不便于控制增加行为的方式和时机。

        二是使用关联。组合即将一个对象嵌入到另一个对象中，由另一个对象来决定是否引用该对]]></description><category></category></item><item><title><![CDATA[JAVA-抽象类和接口的区别总结]]></title><link>https://blog.youkuaiyun.com/oshirdey/article/details/38144639</link><guid>https://blog.youkuaiyun.com/oshirdey/article/details/38144639</guid><author>oshirdey</author><pubDate>Sat, 26 Jul 2014 15:07:53 +0800</pubDate><description><![CDATA[首先.抽象类和接口都很好的提供了一种将实现和接口分离的方法..
 一、抽象类
我们都知道在面向对象的领域一切都是对象，同时所有的对象都是通过类来描述的，但是并不是所有的类都是来描述对象的。如果一个类没有足够的信息来描述一个具体的对象，而需要其他具体的类来支撑它，那么这样的类我们称它为抽象类。比如new Animal()，我们都知道这个是产生一个动物Animal对象，但是这个Animal具体长成]]></description><category></category></item></channel></rss>