armman
码龄19年
关注
提问 私信
  • 博客:634,561
    社区:718
    635,279
    总访问量
  • 259
    原创
  • 2,000,821
    排名
  • 82
    粉丝
  • 0
    铁粉
IP属地以运营商信息为准,境内显示到省(区、市),境外显示到国家(地区)
IP 属地:北京市
  • 加入CSDN时间: 2005-12-26
博客简介:

armman的专栏

查看详细资料
个人成就
  • 获得33次点赞
  • 内容获得67次评论
  • 获得96次收藏
创作历程
  • 331篇
    2007年
  • 1篇
    2006年
成就勋章
创作活动更多

如何做好一份技术文档?

无论你是技术大神还是初涉此领域的新手,都欢迎分享你的宝贵经验、独到见解与创新方法,为技术传播之路点亮明灯!

342人参与 去创作
  • 最近
  • 文章
  • 代码仓
  • 资源
  • 问答
  • 帖子
  • 视频
  • 课程
  • 关注/订阅/互动
  • 收藏
搜TA的内容
搜索 取消

设计之道--设计之道

发布资源 2008.12.12 ·
application/pdf

捉虫历险记——常见C++Bug大围剿

发布资源 2008.02.13 ·
application/pdf

标准C++类std::string的内存共享和Copy-On-Write技术

 1、             概念 Scott Meyers在《More Effective C++》中举了个例子,不知你是否还记得?在你还在上学的时候,你的父母要你不要看电视,而去复习功课,于是你把自己关在房间里,做出一副正在复习功课的样子,其实你在干着别的诸如给班上的某位女生写情书之类的事,而一旦你的父母出来在你房间要检查你是否在复习时,你才真正捡起课本看书。这就是“拖延战术”,
转载
发布博客 2007.08.13 ·
3791 阅读 ·
0 点赞 ·
0 评论 ·
3 收藏

使用Libxml2操作XML文档

一、Libxml2介绍: Libxml2 是一个xml的c语言版的解析器,本来是为Gnome项目开发的工具,是一个基于MIT License的免费开源软件。它除了支持c语言版以外,还支持c++、PHP、Pascal、Ruby、Tcl等语言的绑定,能在Windows、Linux、Solaris、MacOsX等平台上运行。功能还是相当强大的,相信满足一般用户需求没有任何问题。二、 Libx
转载
发布博客 2007.08.12 ·
14221 阅读 ·
0 点赞 ·
5 评论 ·
19 收藏

libxml库解析XML文件

  绪论Libxml是一个有免费许可的用于处理XML、可以轻松跨越多个平台的C语言库。Libxml实现了读、创建及操纵XML数据功能。    这个指南基于一个简单的XML应用。 数据类型Libxml 定义了许多数据类型,它隐藏了杂乱的来源以致你不必处理它除非你有特定的需要。xmlChar  替代char,使用UTF-8编码的一字节字符串。如果你的数据使用其它编码,它必须被转换到UTF-8才能使
转载
发布博客 2007.08.12 ·
7513 阅读 ·
0 点赞 ·
1 评论 ·
9 收藏

pImpl的原理

城门失火殃及池鱼pImpl惯用手法的运用方式大家都很清楚,其主要作用是解开类的使用接口和实现的耦合。如果不使用pImpl惯用手法,代码会像这样:       //c.hpp        #includeclass C        {        public:            void f1();        private:           
转载
发布博客 2007.08.11 ·
8139 阅读 ·
0 点赞 ·
1 评论 ·
21 收藏

要求或禁止在堆中产生对象

有时我们想这样管理某些对象,要让某种类型的对象能够自我销毁,即“delete this”。很明显这种管理方式需要此类型对象被分配在堆中。而其它一些时候我们想获得一种保障:“不在堆中分配对象,从而保证某种类型的类不会发生内存泄漏。”若在嵌入式系统上工作,就有可能遇到这种情况,发生在嵌入式系统上的内存泄漏是极其严重的,其堆空间是非常珍贵的。有没有可能编写出代码来要求或禁止在堆中产生对象(heap-
转载
发布博客 2007.08.05 ·
3622 阅读 ·
0 点赞 ·
3 评论 ·
2 收藏

限制某个类所能产生的对象数量

 允许建立零个或一个对象每次实例化一个对象时,我们很确切地知道一件事情:“将调用一个构造函数。”事实确实这样,阻止建立某个类的对象,最容易的方法就是把该类的构造函数声明在类的private域:class CantBeInstantiated {private: CantBeInstantiated(); CantBeInstantiated(const CantBeInst
转载
发布博客 2007.08.05 ·
3187 阅读 ·
1 点赞 ·
0 评论 ·
2 收藏

引用计数

引用计数是这样一个技巧,它允许多个有相同值的对象共享这个值的实现。这个技巧有两个常用动机。第一个是简化跟踪堆中的对象的过程。一旦一个对象通过调用new被分配出来,最要紧的就是记录谁拥有这个对象,因为其所有者--并且只有其所有者--负责对这个对象调用delete。但是,所有权可以被从一个对象传递到另外一个对象(例如通过传递指针型参数),所以跟踪一个对象的所有权是很困难的。象auto_ptr这样的
转载
发布博客 2007.07.29 ·
10054 阅读 ·
1 点赞 ·
5 评论 ·
24 收藏

将构造函数和非成员函数虚拟化

  构造函数虚拟化    从字面来看,谈论“虚拟构造函数”没有意义。当有一个指针或引用,但是不知道其指向对象的真实类型是什么时,可以调用虚拟函数来完成特定类型(type-specific)对象的行为。仅当还没拥有一个对象但是又确切地知道想要的对象的类型时,才会调用构造函数。那么虚拟构造函数又从何谈起呢?     很简单。尽管虚拟构造函数看起来好像没有意义,其实它们有非常大的用处.例
转载
发布博客 2007.07.29 ·
3180 阅读 ·
0 点赞 ·
0 评论 ·
2 收藏

C++各大有名库的介绍(一)

C++各大有名库的介绍之C++标准库  标准库中提供了C++程序的基本设施。虽然C++标准库随着C++标准折腾了许多年,直到标准的出台才正式定型,但是在标准库的实现上却很令人欣慰得看到多种实现,并且已被实践证明为有工业级别强度的佳作。1、Dinkumware C++ Library参考站点:http://www.dinkumware.com/P.J. Plauger编写的高品质
原创
发布博客 2007.07.26 ·
6530 阅读 ·
4 点赞 ·
1 评论 ·
21 收藏

将 type conversions应用于所有 parameters时,请声明为 non-member functions

我们让 classes 支持 implicit type conversions(隐式类型转换)通常是一个不好的主意。当然,这条规则有例外,最普通的一种就是在创建数值类型时。例如,如果设计一个代表 rational numbers(有理数)的 class,允许从 integers(整数)到 rationals(有理数)的 implicit conversions(隐式转换)看上去没什么不合理的
转载
发布博客 2007.07.14 ·
2745 阅读 ·
0 点赞 ·
0 评论 ·
1 收藏

避免覆盖(hiding)“通过继承得到的名字”

 C++ 中,我们该用哪种态度对待通过继承得到的名字.事情的实质与继承没什么关系。它与作用域有关。我们都知道它在代码中是这样的,int x;                        // global variablevoid someFunc(){  double x;                   // local variable  std::cin >> x
转载
发布博客 2007.07.08 ·
2625 阅读 ·
0 点赞 ·
0 评论 ·
1 收藏

感受Template Meta Programming

  Template Meta Programming (TMP)(模板元编程)是写 template-based(基于模板)的运行于编译期间的 C++ 程序的过程。考虑一下:一个 template metaprogram(模板元程序)是用 C++ 写的运行于 C++ 编译器中的程序。当一个 TMP 程序运行完成,它的输出——从 templates(模板)实例化出的 C++ 源代码片断——随后
转载
发布博客 2007.07.08 ·
2950 阅读 ·
0 点赞 ·
0 评论 ·
2 收藏

考虑支持一个 non-throwing swap(不抛异常的 swap)

SWAP 是一个有趣的函数。最早作为 STL 的构件被引入,后来它成为 exception-safe programming(异常安全编程)的支柱和压制自赋值可能性的通用机制。因为 swap 太有用,所以适当地实现它非常重要,但伴随它的不同寻常的重要性而来的,是一系列不同寻常的复杂性。 swap(交换)两个 objects 的值就是互相把自己的值送给对方。缺省情况下,经由标准的 swa
转载
发布博客 2007.07.08 ·
3027 阅读 ·
0 点赞 ·
0 评论 ·
1 收藏

只要有可能就推迟 variable definitions(变量定义)

 只要你定义了一个带有 constructor(构造函数)或 destructor(析构函数)的类型的变量,当控制流程到达变量定义的时候会使你担负构造成本,而当变量离开作用域的时候会使你担负析构成本。如果这一成本关联到无用变量,你就要尽你所能去避免它。 你或许认为你从来不会定义无用变量,但是也许你应该再想一想。考虑下面这个函数,只要一个 password 足够长,它就返回这个 pass
转载
发布博客 2007.07.08 ·
2516 阅读 ·
0 点赞 ·
0 评论 ·
1 收藏

了解Inline

  Inline functions 看起来像 functions,产生的效果也像 functions,它们在各方面都比 macros(宏)好得多,而我们却可以在调用它们时不招致函数调用的成本。 实际上我们得到的可能比想到的更多,因为避免函数调用的成本只是故事的一部分。编译器的优化一般说是为了一段连续的没有函数调用的代码设计的,所以当我们inline 一个函数时,我们就使得编译器对函数
转载
发布博客 2007.07.08 ·
2896 阅读 ·
0 点赞 ·
0 评论 ·
3 收藏

若不想使用 compiler-generated functions(编译器生成函数)请明确拒绝

 房地产代理商出售房屋,服务于这样的代理商的软件系统自然要有一个 class(类)来表示被出售的房屋:class HomeForSale { ... }; 每一个房地产代理商都会很快指出,每一件房产都是独特的——没有两件是完全一样的。在这种情况下,为 HomeForSale object(对象)做一个 copy(拷贝)的想法就令人不解了。怎么能拷贝一个独一无二的东西呢?因此最好
转载
发布博客 2007.07.07 ·
2801 阅读 ·
0 点赞 ·
0 评论 ·
1 收藏

polymorphic base classes(多态基类)中将 destructors声明为 virtual

 程序开发部中有很多方法取得时间,所以有必要建立一个 TimeKeeper base class(基类),并为不同的计时方法建立 derived classes(派生类):class TimeKeeper {public:  TimeKeeper();  ~TimeKeeper();  ...};class AtomicClock: public TimeKeeper { ...
转载
发布博客 2007.07.07 ·
2654 阅读 ·
0 点赞 ·
0 评论 ·
1 收藏

谨慎使用 multiple inheritance(多继承)

触及 Multiple Inheritance (MI)(多继承)时,C++ 社区就会鲜明地分裂为两个基本的阵营。一个阵营认为如果 single inheritance (SI)(单继承)是有好处的,multiple inheritance(多继承)一定更有好处。另一个阵营认为 single inheritance(单继承)有好处,但是多继承引起的麻烦使它得不偿失。首要的事情之一是要承认当
原创
发布博客 2007.07.07 ·
2975 阅读 ·
0 点赞 ·
0 评论 ·
1 收藏
加载更多