自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(47)
  • 收藏
  • 关注

原创 Effective C++ 学记之20 宁以pass-by-reference-to-const 替换 pass-by-value

尽量以pass-by-reference-to-const 替换 pass-by-value。前者比较高效,并可避免切割问题。【内置类型、STL的迭代器、函数对象】比较适合pass-by-value。--------------------------例:Student继承自Person,并拥有自己的schoolName和schoolAddress:class Pers

2013-06-19 17:03:30 726

原创 Effective C++ 学记之19 设计class犹如设计type

class的设计就是type的设计。在定义一个新type之前,请确定一下内容:1 新type对象应该如何被创建和销毁?需要考虑构造函数 析构函数 内存分配函数和释放函数 new new[] delete delete[] (在第八章详解)2 对象的初始化和对象的赋值该有什么样的差别?构造函数 赋值操作符的行为以及其间的差异。别混淆了“初始化”和“赋值”(条款4)

2013-05-29 11:42:29 632

原创 Effective C++ 学记之18 让接口容易被正确使用,不易被误用。

❀“促进正确使用”的方法包括接口的一致性,以及与内置类型的行为兼容。❀“阻止误用”的方法包括建立新类型、限制类型上的操作,束缚对象值,以及消除客户的资源管理责任。❀ tr1::shared_ptr支持订制型删除器,可防范DLL问题,可被用来自动解除互斥锁等。想开发一个“易被正确使用,不易被无用”的接口,首先必须考虑客户可能做出什么样的错误。比如设计一个表示日期的class设

2013-05-21 17:44:29 797

原创 Effective C++ 学记之17 以独立语句将newed对象置入智能指针

以独立语句将newed对象置入智能指针内。如若不然,一旦异常被抛出,有可能导致难以察觉的资源泄露。来一例:int priority();//处理程序优先权的函数void processWidget(std::tr1::shared_ptr pw, int priority);//该函数在动态分配所得的Widget上进行某些带有优先权的处理。调用:processWidge

2013-05-15 10:37:53 584

原创 Effective C++ 学记之16 成对使用new和delete时要采取相同形式

如果你在new表达式中使用[],必须在相应的delete表达式中也使用[]。如果你在new表达式中不使用[],一定不要在相应的delete表达式中使用[]。std::string* strPtr1 = new std::string;      std::string* strPtr2 = new std::string[100]; ...delete strPtr1; /

2013-05-13 12:11:16 597

原创 Effective C++ 学记之15 在资源管理类中提供对原始资源的访问

APIs 往往要求访问原始资源(raw resources),所以每一个RAII class应该提供一个“取得其所管理之资源”的方法。对原始资源的访问可能经由显式转换或隐式转换。一般而言显式转换比较安全,但隐式转换对客户比较方便。前面条款13的例子中使用了智能指针如auto_ptr或tr1::shared_ptr保存createInvestment的调用结果:std::

2013-05-10 13:48:50 723

原创 Effective C++ 学记之14 在资源管理类中 小心 copying行为

复制RAII对象必须一并复制它所管理的资源,所以资源的copying行为决定RAII对象的copying行为。普遍而常见的RAII class copying行为是:抑制copying、施行引用计数法。不过其他行为也都可能被实现。auto_ptr和shared_ptr的观念表现在heap-head资源上。除此之外的其他资源而言,也可能我们需要创建自己的资源管理类。假

2013-05-09 14:31:58 644

原创 Effective C++ 学记之13 以对象管理资源

为防止资源泄露,请使用RAII对象,它们的构造函数中获得资源并在析构函数中释放资源。两个常被使用的RAII classes分别是trl::shared_ptr和auto_ptr。前者通常是较佳选择,以为copy行为比较直观。若选择auto_ptr,复制动作会使它(被复制物)指向null。假设一个用来塑模投资行为(股票,证券等)的程序库,其中各式各样的投资类型继承自一个root

2013-05-08 11:04:38 510

原创 Effective C++ 学记之12 复制对象时勿忘其每一个成分

copying函数应该确保复制“对象内的所有成员变量”及“所有base class成分”。不要尝试以某个copying函数实现另一个copying函数。应该将共同机能放进第三个函数中,并由两个copying函数共同调用。这里说的copying函数指的是“copy构造函数”和“copy赋值操作符”。前面的条款讲到,当用户自己定义copying函数时,编译器不会生成默认的cop

2013-05-07 13:31:56 603

原创 Effective C++ 学记之11 在operator=中处理“自我赋值“

确保当对象自我赋值时 operator= 有良好行为。其中技术包括比较“来源对象”和“目标对象”的地址,精心周到的语句顺序,以及copy-and-swap。确定任何函数如果操作一个以上的对象,而其中多个对象是同一个对象,其行为仍然正确。举几个潜在的自我赋值例子:①a[i]=a[j]    //i=j的时候②*px = *py    //*px 和 *py指向同一个对象

2013-05-06 16:21:15 545

原创 Effective C++ 学记之10 令operator=返回一个 reference to *this

令赋值操作符返回一个引用 to *this例:int x,y,z;x=y=z=15; //连锁赋值赋值采用右结合律被解析为 x=(y=(z=15));为了实现“连锁赋值”,我们应该遵循这样一个协议:赋值操作符必须返回一个引用指向操作符的左侧实参。看下面的实现:class Widget{public:    ...    Widget& o

2013-04-27 17:15:55 495

原创 Effective C++学记之09 绝不在构造和析构过程中调用virtual函数

在构造和析构期间不要调用virtual函数,因为这类调用从不下降至子类。例:股票交易买进卖出审计日志系统。class Transaction{public:    Transaction();    virtual void logTransaction() const = 0; //做出一份因类型不同而不同的日志记录    ...};Transaction::

2013-04-27 11:51:56 559

原创 Effective C++学记之08 别让异常逃离析构函数

1 析构函数绝对不要突出异常。如果一个被析构函数调用的函数可能抛出异常,析构函数应该捕捉任何异常,然后吞下它们(不传播)或结束程序。2 如果客户需要对某个操作函数运行期间抛出的异常做出反应,那么class应该提供一个普通函数(而非在析构函数中)执行该操作。例:数据库连接类class DBConnection{public:    ...    static

2013-04-25 10:33:41 517

原创 Effective C++学记之07 为多态基类声明virtual析构函数

1 polymorphic(带多态性质的)base classes应该声明一个virtual析构函数,如果class带有任何virtual函数,应该拥有一个virtual析构函数。class TimeKeeper{public:    TimeKeeper();    ~TimeKeeper();    ...};class AtomicClock:public T

2013-04-24 11:19:38 459

原创 Effective C++学记之06 若不想使用编译器自动生成的函数,就应该明确拒绝。

如条款05所示,如果类中不声明copy构造函数和copy assign操作符,编译器会自动声明。那么对于一些独一无二的对象,如果不希望通过copy构造函数和copy assign操作符进行拷贝,该怎么做呢?为驳回编译器自动提供的机能,可将相应的成员函数声明为private并且不予实现。使用像如下Uncopyable这样的base class 也是一种做法。class Uncopya

2013-04-23 10:52:11 573

原创 Effective C++学记之05 编译器可以暗自为class创建default构造函数 copy构造函数 copy assignment操作符 析构函数。

编译器可以暗自为class创建default构造函数 copy构造函数 copy assignment操作符 析构函数。如果你写下class Empty{};等价于你写下:class Empty{public:    Empty(){...}  //default构造函数    Empty(const Empty& rhs){...}  //copy 构造函数    ~

2013-04-22 14:16:24 634

原创 Effective C++学记之04 确定对象被使用前先被初始化

1 对内置类型进行手工初始化,因为c++不保证初始化它们。内置类型:int x = 0; //手工实现初始化通常如果使用c part of c++而且初始化可能招致运行期成本,就不保证发生初始化;一旦进入non-c part of c++,规则有些变化。这就很好的解释了为甚array(来自c part of c++)不保证其内容初始化,而vector(来自non-c part of

2013-04-19 14:56:31 547

原创 Effective C++学记之03 尽可能使用const

1 const和指针的关系对于我这个c++初学者来说,指针搭配常量让人有点小头疼。在描述一些概念比如“指向const的const指针”更让人大脑一时转不过来。看书中的例子:char greeting[] = "HELLO" char* p = greeting;                        //non-const pointer,non-const data

2013-04-19 10:37:20 538

原创 Effective C++学记之02 使用const enums inline来代替#define

条款02 对于单纯常量,最好以const对象或enum替换#define;对于形似函数的宏,最好改用inline函数替换#define。1首先了解一下预处理和编译的区别:编译程序对源代码进行编译之前,即在语法分析、代码生成和优化之前,由预处理程序对源代码进行第一次处理。处理时,它忽略注释语句,加入.h头文件,并按定义进行替换。预处理的输出,即是编译程序的输入。预处理命令必须单行书写,不以分

2013-04-16 11:33:40 607

转载 C++拷贝构造函数详解

该文章转载自http://blog.csdn.net/lwbeyond/article/details/6202256一. 什么是拷贝构造函数首先对于普通类型的对象来说,它们之间的复制是很简单的,例如:[c-sharp] view plaincopyint a = 100;  int b = a;   而类对象与普通对象不同,类对

2013-04-12 15:14:13 484 1

原创 c++学习之异常处理

异常的捕获是严格按照数据类型匹配实现的,不允许类型转换,因此catch的参数必须有严格的数据类型。try{    throw 20;}catch(unsigned int){    //...}由于常量20的类型为int,而不是unsigned int 所以无法捕获,。如果函数抛出的异常找不到匹配的catch,则程序通常以abort()函数终止。异常使用

2013-04-09 18:08:06 445

原创 c++学习之标准库异常类

基类exception的接口定义如下:                namespace std {                         class exception {                         public:                                   exception() throw();   //

2013-04-09 16:23:44 602

转载 《Effective C++》之请记住

一,让自己习惯C++1,C++是一个语言联邦,包括C,Object-Oriented C++,Template C++和STL四个部分。C++高效编程守则视状况而变化,取决于你使用C++的哪一部分。2,对于单纯常量,最好以const对象或enum替换#define。3,对于形似函数的宏(macro),最好改用inline函数替换#define.4,将某些东西声明为const可帮助编

2013-04-09 14:41:53 451

原创 c++学习篇之【指针和引用】

1指针有自己的存储空间,它的内容是所指内存的地址,指向一块内存;引用是某块内存的别名,不占据实际的内存空间。2引用使用时无需解引用(*),指针需要解引用。3引用在定义时必须被初始化,之后不可变;指针可在任何时候被初始化,可随时改变所指的对象。4引用没有 const;指针有 const,const的指针不可变。 5引用总是指向一个对象,没有所谓的空

2013-03-28 11:41:40 432

转载 Linux 信号处理机制

软中断信号(signal,又简称为信号)用来通知进程发生了异步事件。进程之间可以互相通过系统调用kill发送软中断信号。内核也可以因为内部事件而给进程发送信号,通知进程发生了某个事件。注意,信号只是用来通知某进程发生了什么事件,并不给该进程传递任何数据。收 到信号的进程对各种信号有不同的处理方法。处理方法可以分为三类:第一种是类似中断的处理程序,对于需要处理的信号,进程可以指定处理函数

2013-03-26 19:23:00 371

转载 【《教父》经典台词】

【《教父》经典台词】①,不要让别人知道你的想法。 ②,当你说不时,你要使不听上去象是一样好听。③,让朋友低估你的优点,让敌人高估你的缺点。④,痛苦不象死亡那样无可挽回!⑤,如果你没有时间和家人在一起,你就永远无法成为真正的男人。⑥,永远不要恨你的敌人 ,因为这会影响你的判断力。

2011-12-09 09:35:44 511

原创 Linux下进程的“终结者”和Linux C函数

Linux下进程的“终结者”kill [-s sigspec | -n signum | -sigspec] pid | jobspec … or kill -l [sigspec]  说明:kill 送出一个特定的信号 (signal) 给行程 id 为 pid 的行程根据该信号而做特定的动作,若没有指定,预设是送出终止 (TERM) 的信号   -s (signal) : 其中

2011-11-08 18:57:06 1007

原创 决不放弃

      今天在网上查到了日语2级的成绩,264分通过,本来通过是预料中的事,但是能查到还是小高兴了一番,词汇只拿了67,跟别人说的轻轻松松80分差了一大截,听力是63,本来就是弱项,这个分数勉勉强强正常水平。阅读语法134,似乎考试的大部分精力都放在了阅读上,以致于后面的语法都没做完,貌似只拿到30分不到,不管怎么着,这次总算是通过了,不枉之前朋友们辛苦帮忙报名和自己几个月来的努力,再次感谢朋

2009-03-02 12:09:00 454

转载 垃圾回收机制

 垃圾回收机制一、什么是垃圾回收       在C++中,程序员需要自己写析构函数来释放内存,一旦忘记,会导致内存泄漏。Java语言对内存的分配管理是通过JVM内部机制决定的。程序员可以不关心其处理。jvm的一个系统级线程会自动检查,释放无用对象占用的内存。二、垃圾回收机制原理       垃圾回收器的运行是间歇的,当jvm感到内存紧缺时执行(可以通过System.gc()来强

2009-02-23 02:34:00 2394

转载 安然事件回顾与启示

重新审视以安然事件为代表的美国财务舞弊案件风波,以及由此引起的美国相关体制、制度的重大改变和影响,有助于我们深入了解美国企业制度及其治理、资本市场、会计制度、注册会计师制度以及相关法律制度,这对于我国资本市场建设,以及企业制度与治理机制、注册会计师制度的改革和完善,具有一定的借鉴意义。一、安然事件的发生与发展(一)事件的由来安然曾经是叱咤风云的“能源帝国”, 2000年总收入高达100

2009-02-21 10:25:00 10228

转载 日本农田搞笑稻草人

 编辑点评:看看日本的搞笑稻草人,不知道能不能吓走鸟儿呢?藁人形(わらにんぎょう)は、藁を束ねる・編むなどして人間の形を模した人形である。丑の刻参りにおいて用いられる呪いの道具の一種としても知られる。それに関連して、ホラー映画などでは恐怖を象徴する小道具として用いられることもある。作法として、五寸釘を使い、丑三つ時に相手と同調関係を得ている物を埋め込み、藁人形に釘を打ち

2009-02-21 10:17:00 450

转载 ArrayList和LinkedList的区别

  一般大家都知道ArrayList和LinkedList的大致区别:    1.ArrayList是实现了基于动态数组的数据结构,LinkedList基于链表的数据结构。    2.对于随机访问get和set,ArrayList觉得优于LinkedList,因为LinkedList要移动指针。    3.对于新增和删除操作add和remove,LinedList比较占优势,因为Arr

2009-02-20 21:55:00 380

原创 jbossd 的ejb客户端视图

今天学习了jboss的ejb 客户端视图,总结一下:客户端通过主代理和远程代理来访问服务器.容器提供方需要在ejb实现中产生javax.ejb.EJBHome(实现主接口) 和 javax.ejb.EJBObject(实现远程接口)对象,客户端通过引用这两个对象来引用ejb实例, EJBHome代理组成:                                           

2008-01-23 16:38:00 676

转载 期货和期权的区别

1 标的物不同 期货交易的标的物是商品或期货合约,而期权交易的标的物则是一种商品或期货合约选择权的买卖权利。  2 买卖双方的权利义务  期货交易中,买卖双方具有合约规定的对等的权利和义务。期权交易中,买方有以合约规定的价格是否买入或卖出期货合约的权利,而卖方则有被动履约的义务。一旦买方提出执行,卖方则必须以履约的方式了结其期权部位。3 买卖双方的盈亏结构  期货交易中,随着期货价

2007-12-14 18:55:00 2410

原创 jboss 远程访问服务

JBoss除了提供MBean服务这种方式将任意的功能集成进来以外,还提供了分离调用的功能.它能将MBean的功能接口通过任意的协议供客户端远程访问.分离调用器的意义:远程访问以及访问服务的协议是一个相对于组件独立的服务.也就是说,可以将名称服务通过RMI/JRMP 或RMI/HTTP等任意的传输协议来进行访问.分离调用器的架构客户端这边有一个客户端代理,它提供MBean服务的动态代理接口,

2007-12-13 19:53:00 2529 1

原创 jboss学习笔记2

 1.WAR文件的部署 JBoss支持热部署,也就是war文件部署到服务器上后不需要重新启动JBoss(Tomcat不支这种特性)。war文件的部署很简单,直接将war文件拷贝到JBoss/server/default/deploy目录下即可。   2.JBoss的目录结构       bin:包含各种脚本文件以及相关文件,比如run.bat和shutdown.bat批处理文件。       cl

2007-12-11 11:39:00 2374 2

原创 jboss的启动过程

1 在%JBOSS_HOME%/bin目录下运行启动脚本 run.bat,通过org.jboss.Main.main(Dtring[])作为入口点,引发启动.2 main 方法创建一个名为jboss的线程组,随后启动一个属于该线程组的线程,这个线程调Main.boot方法.3 boot方法处理main函数的参数,随后创建一个org.jboss.system.server.ServerLoa

2007-12-06 11:58:00 3122

转载 Jboss控制台jmx-console的安全设置 (转自yzhxy2002的专栏)

 前言:安装好jboss并启动jboss后,在浏览器窗口的地址栏里键入http://localhost:8080/jmx-console就可以浏览jboss的部署管理的一些信息,默认情况下不键入任何用户名和密码就可以进入此页面,方便是方便,但真正使用起来还是有点安全隐患,因为不管任何人只要知道server的ip都可以进去访问。下面我们针对此问题对jboss进行配置,使得访问jmx-consol

2007-12-05 16:45:00 1701

原创 jboss 学习笔记1

 jboss 类加载架构jboss类加载机构中的核心组件是类装载器org.jboss.mx.loading.UnifiedClassLoader3(这里我们简称UCL).这个装载器是标准的java.net.URLClassLoader 的一个派生,所使用的共享池是org.jboss.mx.loading.UnifiedLoderRepository3.每个UCL都关联着一个共享池,而一个共享池

2007-12-04 13:38:00 1645 1

原创 全排列算法总结

递归实现全排列算法设R={r1,r2,...,rn}是要进行排列的n个元素,Ri=R-{ri}.集X中元素的全排列记为Perm(X),(ri)Perm(X)表示在全排列Perm(X)的每一个排列前加上前缀ri得到的排列.R的全排列可归纳定义如下:  当n=1时,Perm(R)={r},r是集合R中唯一的元素.  当n>1时,Perm(R)由(r1)Perm(R1),(r2)Perm(R2)

2007-01-26 15:59:00 1118

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除