上一页 1 ··· 25 26 27 28 29 30 31 32 33 ··· 58 下一页
  2014年1月24日
摘要: 原文:http://www.cnblogs.com/wanghetao/archive/2011/11/21/2257403.html1. placementnew的含义placementnew是重载operatornew的一个标准、全局的版本,它不能够被自定义的版本代替(不像普通版本的operatornew和operatordelete能够被替换)。void*operatornew(size_t,void*p)throw(){returnp;}placementnew的执行忽略了size_t参数,只返还第二个参数。其结果是允许用户把一个对象放到一个特定的地方,达到调用构造函数的效果。和其他普 阅读全文
posted @ 2014-01-24 20:02 Andy Niu 阅读(249) 评论(0) 推荐(0) 编辑
摘要: 1、【50】讲了,有很多理由需要写个自定义的new/delete,自定义new/delete的时候,需要遵守一些规则。2、循环申请,直到成功或者抛出异常,如下: 1 void* operator new (std::size_t size) throw() 2 { 3 if(size=0) 4 { 5 size =1; 6 } 7 while (true) 8 { 9 if(分配成功)10 {11 ... 阅读全文
posted @ 2014-01-24 19:57 Andy Niu 阅读(240) 评论(0) 推荐(0) 编辑
摘要: 1、有时候,我们替换掉编译器提供的new或者delete。首先思考,为什么想要替换?下面是三个常见理由: a、用来检测运用上的错误,超额分配一些内存,再额外的空间放置一些内存; b、为了强化效能,编译器提供的new/delete是通用的,通用就意味着冗余和效率低下,为什么?这个很好理解,因为他要支持很多情况下,也必须考虑很多情况。我们重写new/delete,也就是说,对于特定情况,给出特定的实现。 c、为了收集使用上的统计数据。 阅读全文
posted @ 2014-01-24 19:39 Andy Niu 阅读(482) 评论(0) 推荐(0) 编辑
摘要: 1、使用operator new无法获取内存时,对于旧式编译器,会返回一个null指针。对于新式编译器,会抛出一个异常。2、考虑下面的需求,当operator new 无法获取内存时,程序员期望获得通知,并调用一个方法。也就是说,向系统传递一个回调方法。这就是new_handler: typedef void (* new_handler) (void); new_handler是一个指针方法,形参为空,没有返回值。 new_handler set_new_handler(new_handler p) throw (); set_new_handler 方法就是传递一个回调方法,返回老的... 阅读全文
posted @ 2014-01-24 19:18 Andy Niu 阅读(381) 评论(0) 推荐(0) 编辑
摘要: 1、Widget* pw = new Widget; 调用了两个方法:第一个方法是operator new 负责分配内存;第二个方法是在分配的内存上构造Widget,即调用Widget的default构造方法。2、那么问题来了,如果operator new分配内存成功,而Widget构造抛出异常,这种情况下,pw还没有赋值,这不就导致资源泄露了? 不会造成资源泄露,因为C++运行系统保证调用delete释放资源。3、正常的operator new 如下: void* operator new(std::size_t) throw (std::bad_alloc); 正常的operator... 阅读全文
posted @ 2014-01-24 18:44 Andy Niu 阅读(459) 评论(0) 推荐(1) 编辑
  2014年1月23日
摘要: 1、所谓智能指针,就是资源管理类,行为像指针。因为要对不同的类型的指针进行封装,所以智能指针是类模版。2、那么问题来了。对于原始指针,支持隐式类型转换,也就是说,父类指针可以指向子类指针。因此,我们当然期望,父类智能指针可以指向子类智能指针,但是,不同Base和Derived实例化出来的智能指针,是不同的类型,之间没有任何关系,更谈不上继承关系,肯定不能赋值。3、怎么解决呢? 提供一个成员方法模版,对兼容的类型进行构造或者赋值。也就是copy构造模版和copy赋值模版。4、这里出现了一个问题,以copy构造模版为例,当copy构造模版的形参与类模版的形参一致,那么就退化为普通的copy构造,. 阅读全文
posted @ 2014-01-23 19:36 Andy Niu 阅读(436) 评论(0) 推荐(0) 编辑
摘要: 原文:http://blog.csdn.net/txgc1009/article/details/6700830许多面试题看似简单,却需要深厚的基本功才能给出完美的解答。企业要求面试者写一个最简单的strcpy函数都可看出面试者在技术上究竟达到了怎样的程度,我们能真正写好一个strcpy函数吗?我们都觉得自己能,可是我们写出的strcpy很可能只能拿到10分中的2分。读者可从本文看到strcpy函数从2分到10分解答的例子,看看自己属于什么样的层次。此外,还有一些面试题考查面试者敏捷的思维能力。 分析这些面试题,本身包含很强的趣味性;而作为一名研发人员,通过对这些面试题的深入剖析则可进一步增. 阅读全文
posted @ 2014-01-23 19:08 Andy Niu 阅读(407) 评论(0) 推荐(0) 编辑
摘要: 1、假设【24】中的Rational是类模版,同时有non-member的方法模版,现在考虑下面的调用: Rational a(1,2); Rational result = a*2; // Error2、为什么? 调用方法的时候,如果没有完全匹配的方法,编译器会尝试进行隐式类型转换。现在考虑模版的实例化,调用方法的时候,编译器根据模版实参,确定模版形参,然后实例化一个方法。但是,实例化方法的时候,从不进行隐式类型转换。思考为什么?假如考虑隐式类型转换,那么存在隐式类型转换的情况多了,不可能都去实例化。也就是说,模版实例化的时候,不考虑隐式类型转换,因此也就没有实例化方法。没有生成方法,... 阅读全文
posted @ 2014-01-23 18:54 Andy Niu 阅读(313) 评论(0) 推荐(0) 编辑
摘要: 1、令class支持隐式类型转换,往往是个糟糕的主意。但有些情况是合理的,比如数值类型。考虑,有理数Rational有分子,分母两个字段,缺省参数值为0,1。Ration a = 2;我们期望构造一个分子为2,分母为1的有理数,这是非常合理和自然的。因此,Rational的构造方法为Ration(int numerator =0, int denominator =1);不添加explicit。2、考虑Rational 有个成员方法 operator*,如下: const Ration operator*(const Rational& rhs) const; Rational a ( 阅读全文
posted @ 2014-01-23 18:33 Andy Niu 阅读(584) 评论(0) 推荐(0) 编辑
摘要: 1、网址:http://boost.org2、有很多C++组织和网站,但是Boost库有两个优势:a、和标准委员会关系密切;b、加入C++标准的各种功能的测试场。 阅读全文
posted @ 2014-01-23 17:59 Andy Niu 阅读(148) 评论(0) 推荐(0) 编辑
上一页 1 ··· 25 26 27 28 29 30 31 32 33 ··· 58 下一页