<?xml version="1.0" encoding="utf-8" ?><rss version="2.0"><channel><title><![CDATA[hmalloc的专栏]]></title><description><![CDATA[我，行走在程序员的路上，痛并快乐着。]]></description><link>https://blog.youkuaiyun.com/hmalloc</link><language>zh-cn</language><generator>https://blog.youkuaiyun.com/</generator><copyright><![CDATA[Copyright &copy; hmalloc]]></copyright><item><title><![CDATA[c++指向成员的指针（二）]]></title><link>https://blog.youkuaiyun.com/hmalloc/article/details/21092241</link><guid>https://blog.youkuaiyun.com/hmalloc/article/details/21092241</guid><author>hmalloc</author><pubDate>Wed, 12 Mar 2014 15:27:28 +0800</pubDate><description><![CDATA[上一篇文章我们讲解了成员指针的概念及用法，这里我们再深入来探讨一下。
我们知道一般的指针在32位平台上占4个字节，64位平台上占8个字节，但成员指针因为其特殊性，它不是一般的指针，在32位平台上它占8个字节，而在64位平台上占16个字节，这个我们可以通过sizeof很容易测得。
我这里的平台是64位，所以接下来以64位平台来研究一下，为何成员指针占16个字节呢？这个在标准中没有多少说明，但在]]></description><category></category></item><item><title><![CDATA[c++指向成员的指针（一）]]></title><link>https://blog.youkuaiyun.com/hmalloc/article/details/21054947</link><guid>https://blog.youkuaiyun.com/hmalloc/article/details/21054947</guid><author>hmalloc</author><pubDate>Wed, 12 Mar 2014 10:33:25 +0800</pubDate><description><![CDATA[指向成员的指针（Pointer to Member）也称为成员指针，可能很多人对这一项技术比较陌生，也可能当你看到成员指针这个词会把它理解为类里面有个指针成员，实际上它们是两回事。成员指针是指通过指针来操作类里面的成员，包括两种——数据成员和函数成员。]]></description><category></category></item><item><title><![CDATA[c++ this 指针详解]]></title><link>https://blog.youkuaiyun.com/hmalloc/article/details/20163143</link><guid>https://blog.youkuaiyun.com/hmalloc/article/details/20163143</guid><author>hmalloc</author><pubDate>Fri, 28 Feb 2014 23:39:29 +0800</pubDate><description><![CDATA[首先来观察一段代码：
class MyClass {
	int m_data;
public:
	MyClass(int d = 0) : m_data(d) {}
	int data() const {
		return m_data;
	}
};

void tmyclass() {
	MyClass obj1;
	MyClass obj2(100);
	cout << obj1.data(]]></description><category></category></item><item><title><![CDATA[c++ final类实现]]></title><link>https://blog.youkuaiyun.com/hmalloc/article/details/20087049</link><guid>https://blog.youkuaiyun.com/hmalloc/article/details/20087049</guid><author>hmalloc</author><pubDate>Fri, 28 Feb 2014 01:39:07 +0800</pubDate><description><![CDATA[有时候我们希望一个类不能被别的类继承，这种类称为final类，在C++11标准之前要实现这种技术，需要巧妙地利用一些细节。
如何使得一个类不能被继承但又不影响该类的使用呢？这里的方法我们需要用到多级继承技巧。首先我们要明确以下几点：
1）如果类的构造函数或析析构函数声明为私有的，那么该类不能被继承，但同时该类也不能使用；
2）派生类只能访问基类的公有成员和保护成员，如果是私有继承，基类中所有]]></description><category></category></item><item><title><![CDATA[c++的单例模式]]></title><link>https://blog.youkuaiyun.com/hmalloc/article/details/20085931</link><guid>https://blog.youkuaiyun.com/hmalloc/article/details/20085931</guid><author>hmalloc</author><pubDate>Fri, 28 Feb 2014 00:34:42 +0800</pubDate><description><![CDATA[单例模式指的是一个类只能有一个实例，其实现思想是将类的构造函数声明为私有的，在类的内部提供静态函数获取内部静态对象的指针，示例如下：
class Singleton {
	std::string m_name;
	Singleton() {
	}

public:
	static Singleton *getInstance() {
		static Singleton obj;
		retur]]></description><category></category></item><item><title><![CDATA[malloc/free和new/delete]]></title><link>https://blog.youkuaiyun.com/hmalloc/article/details/19616777</link><guid>https://blog.youkuaiyun.com/hmalloc/article/details/19616777</guid><author>hmalloc</author><pubDate>Fri, 21 Feb 2014 13:49:28 +0800</pubDate><description><![CDATA[C++引入了新的new/delete的动态内存分配方式，其和malloc/free主要有以下几点区别：
1）malloc/free是函数，而new/delete是运算符；
2）malloc分配失败会返回空指针，而new分配失败默认将产生异常，如果程序没有捕捉异常，程序将崩溃，当然也可以让其不产生异常也返回空指针；
3）当分配一个类的对象时，用new可以调用类的构造函数而malloc不会，当释]]></description><category></category></item><item><title><![CDATA[你真的理解指针、数组和字符串吗？]]></title><link>https://blog.youkuaiyun.com/hmalloc/article/details/19552361</link><guid>https://blog.youkuaiyun.com/hmalloc/article/details/19552361</guid><author>hmalloc</author><pubDate>Thu, 20 Feb 2014 15:59:51 +0800</pubDate><description><![CDATA[指针、数组、字符串是C/C++语言中重要的组成部分，很多人认为指针比较难理解，而初学者更容易在这里犯错误，其实当你真正理解其本质后，也就不难了。
首先来看一些错误用法的示范：]]></description><category></category></item><item><title><![CDATA[C++的Rule of Three]]></title><link>https://blog.youkuaiyun.com/hmalloc/article/details/19431477</link><guid>https://blog.youkuaiyun.com/hmalloc/article/details/19431477</guid><author>hmalloc</author><pubDate>Wed, 19 Feb 2014 21:18:02 +0800</pubDate><description><![CDATA[Rule of Three是国外的人提出来的一条法则，可运用于很多行业，在他们看来，数字3代表稳定，也让人觉得舒服。可以把它理解为三者法则，国内也有人翻译为三强鼎立法则。
C++中的Rule of Three指的是析构函数、拷贝构造函数和重载赋值函数三者之间的关系，具体指的是在一个类当中当你需要显式地定义这三个函数中的任意一个时，你应该同时显式地定义其它两个，也就是说这三个函数要么都不定义，要么]]></description><category></category></item><item><title><![CDATA[成员初始化列表]]></title><link>https://blog.youkuaiyun.com/hmalloc/article/details/19400413</link><guid>https://blog.youkuaiyun.com/hmalloc/article/details/19400413</guid><author>hmalloc</author><pubDate>Tue, 18 Feb 2014 11:30:40 +0800</pubDate><description><![CDATA[任一个对象的创建都要调用构造函数，而在构造函数中一般要给对象属性赋值。成员初始化列表（member initialize list）是构造函数中特有的语法，用以简化对对象属性的赋值。其用法如下：
class MyClass {
	int m_a, m_b, m_c;
public:
	MyClass(int a = 0, int b = 0, int c = 0) :
		m_a(a), m_b]]></description><category></category></item><item><title><![CDATA[显式构造函数]]></title><link>https://blog.youkuaiyun.com/hmalloc/article/details/19398933</link><guid>https://blog.youkuaiyun.com/hmalloc/article/details/19398933</guid><author>hmalloc</author><pubDate>Tue, 18 Feb 2014 10:34:54 +0800</pubDate><description><![CDATA[构造一个对象可以有多种方法，有一种构造用到了隐式转换规则，请看一段代码：

class MyClass {
	string m_name;
public:
	MyClass(const char *name) {
		m_name = name;
	}
	const string &name() const { return m_name; }
};

void tmyclass() {
	M]]></description><category></category></item><item><title><![CDATA[linux守护进程实现]]></title><link>https://blog.youkuaiyun.com/hmalloc/article/details/8517286</link><guid>https://blog.youkuaiyun.com/hmalloc/article/details/8517286</guid><author>hmalloc</author><pubDate>Fri, 18 Jan 2013 16:08:54 +0800</pubDate><description><![CDATA[守护（daemon）进程即在后台运行的进程，网上有很多介绍守护进程的文章，这里不再赘述，直接上代码。
static void _daemon_prep(int stderr_log)
{
    /* Avoid keeping any directory in use. */
    chdir("/");
 
    /* Reset process session id. */
    s]]></description><category></category></item><item><title><![CDATA[linux静态库与共享库（二）]]></title><link>https://blog.youkuaiyun.com/hmalloc/article/details/8463325</link><guid>https://blog.youkuaiyun.com/hmalloc/article/details/8463325</guid><author>hmalloc</author><pubDate>Sat, 05 Jan 2013 23:25:22 +0800</pubDate><description><![CDATA[在阅读以下内容之前，请点击这里查看前一部分内容，前一部分内容介绍了库的创建及编译运行时库的搜索，接下来我们看看库的使用，在这里建议各位看客亲自动手验证，这样才能加深印象。
6 库的使用
下面来写个程序测试一下前面两个库文件，代码如下：
/* say.c */
#include 
#include 

void say_something(const char *str);

int main]]></description><category></category></item><item><title><![CDATA[c++单元测试工具之——gtest]]></title><link>https://blog.youkuaiyun.com/hmalloc/article/details/8463657</link><guid>https://blog.youkuaiyun.com/hmalloc/article/details/8463657</guid><author>hmalloc</author><pubDate>Fri, 04 Jan 2013 15:26:52 +0800</pubDate><description><![CDATA[gtest是谷歌为C++开发的单元测试框架，该框架基于xUnit架构。gtest提供了较丰富的测试特性，且其命令行方式输出界面友好美观，是C++单元测试工具的较佳选择。
1 gtest环境部署
先从这里下载到gtest源码包，解压后执行如下命令：
./configure
make
这里google没有提供make install行为来安装，我们需要手动安装。继续执行以下命令：
cp li]]></description><category></category></item><item><title><![CDATA[linux静态库与共享库（一）]]></title><link>https://blog.youkuaiyun.com/hmalloc/article/details/8449527</link><guid>https://blog.youkuaiyun.com/hmalloc/article/details/8449527</guid><author>hmalloc</author><pubDate>Fri, 04 Jan 2013 09:54:27 +0800</pubDate><description><![CDATA[1 引言
软件设计中有一条原则是模块化，当一个项目达到一定规模时，往往将模块编译成库的形式，这也有利于分工协作。在linux中库分为静态库和动态库。静态库，是在可执行程序链接时就已经将该库的代码链入到可执行程序中，在物理上成为执行程序的一部分，使用静态库编译的程序运行时无需该库文件支持，哪里都可以用，但是生成的可执行文件较大。动态库，是在可执行程序启动时动态加载到执行程序中，可以被多个可执行程序]]></description><category></category></item><item><title><![CDATA[c++日志工具之——log4cplus]]></title><link>https://blog.youkuaiyun.com/hmalloc/article/details/8443291</link><guid>https://blog.youkuaiyun.com/hmalloc/article/details/8443291</guid><author>hmalloc</author><pubDate>Fri, 28 Dec 2012 18:08:46 +0800</pubDate><description><![CDATA[1 日志简介
程序都不可避免地会出现错误输出或崩溃的情况，这种情况往往在开发阶段很难发现，需要在特定的环境下才会出现，一旦出现这种情况，我们需要快速地定位到问题。很显然，当程序出现这种问题时，如果程序自己能够将当时出现该问题的原因记录下来，则能给我们带来莫大的效率，正是因为有了这种需求，所以就有了日志系统。所谓日志，就是程序运行时自动记录每日运行状态的一种行为，这跟我们传统说的打debug的方法]]></description><category></category></item></channel></rss>