摘要: 如果operator new接收到的参数除了size_t之外还有其他的话,那么这个operator new实际上就是一个placement new,所以考虑下下面这样的情况:一个可以用来记录信息的placement new:1 class Widget{2 public:3 ...4 ... 阅读全文
posted @ 2015-10-18 17:40 eversliver 阅读(321) 评论(0) 推荐(0) 编辑
摘要: 几种最常见的这么做的理由: 1.用来检测运行上的错误:可以在分配的内存空间的起始以及结束分别放置单独的签名 2.为了强化性能 3.为了收集使用上的统计数据按照第一点就可以举一个例子: 1 static const int signature = 0XDEADBEEF; 2 typedef us... 阅读全文
posted @ 2015-10-18 17:15 eversliver 阅读(264) 评论(0) 推荐(0) 编辑
摘要: C++中delete一个指针之后,只是回收指针指向位置的空间,而指针本身的值不变。你需要手工将其赋值为NULL。注意的一点是delete NULL指针的时候不会有任何的事情发生小结: operator new内应该有个个无穷循环,若在其中无法返回内存需求,就调用new-handler,这里面也应该... 阅读全文
posted @ 2015-10-18 17:15 eversliver 阅读(276) 评论(0) 推荐(0) 编辑
摘要: 多线程下的内存管理与单线程下是完全不同的,因为heap是一个可以被全局改动的资源,所以所有的线程都有可能去访问这一资源,这回导致很多的race_conditions。当operator new未取得想要的内存的时候,会调用一个用户指定的处理函数,new_handler。 这个函数可以使用set_ne... 阅读全文
posted @ 2015-10-18 17:14 eversliver 阅读(571) 评论(0) 推荐(0) 编辑
摘要: 1 void adance(std::list::iterator& iter, int d) 2 { 3 if(typeid(std::iterator_traits::iterator>::iterator_catagory) 4 ]== typeid(std::ra... 阅读全文
posted @ 2015-10-18 17:13 eversliver 阅读(292) 评论(0) 推荐(0) 编辑
摘要: 在stl的算法中,我们的希望往往是根据不同的迭代器类型进行不同的更有效率的操作: 1 template 2 void advance(IterT iter, DistT dis) 3 { 4 if(iter is a random access iterator) 5 ite... 阅读全文
posted @ 2015-10-18 17:12 eversliver 阅读(411) 评论(0) 推荐(0) 编辑
摘要: 看看下面这个例子: 1 template 2 class Rational{ 3 public: 4 Rational(const T & numerator, const T & denominator); 5 const T numerator()const; 6 con... 阅读全文
posted @ 2015-10-18 17:08 eversliver 阅读(423) 评论(0) 推荐(0) 编辑
摘要: 首先看看下面的真实的指针与模板创建的智能指针之间的区别:1 class Top{...};2 class Middle : public Top{...};3 class Bottom : public Middle{...};4 Top * p1 = new Bottom();5 Top * p2... 阅读全文
posted @ 2015-10-18 17:07 eversliver 阅读(298) 评论(0) 推荐(0) 编辑
摘要: 使用template时,不小心的时候可能就会带来代码膨胀的问题:1 template3 class SquareMatrix{4 public:5 void invert();6 };7 //而对于下面两份模版实例化8 SquareMatrix ma10;9 SquareMatrix ma5... 阅读全文
posted @ 2015-10-18 17:05 eversliver 阅读(387) 评论(0) 推荐(0) 编辑
摘要: typename在很多种情况下与class是完全相同的,例如下面的使用:1 templame2 ......3 template4 ......条款42:了解typename的双重含义 1 template 2 void print2nd(const C containter) 3 { 4 ... 阅读全文
posted @ 2015-10-18 17:03 eversliver 阅读(330) 评论(0) 推荐(0) 编辑
摘要: 相对于继承体系来说,template实际上也使用接口与多态,而继承体系往往使用到的是显式接口以及运行期多态,而template实际上用的是隐式接口以及编译期多态。隐式接口实际上就是类似下面这样的东西:1 template 2 int myTypes(T & tmp)3 {4 tmp.size... 阅读全文
posted @ 2015-10-18 17:02 eversliver 阅读(277) 评论(0) 推荐(0) 编辑
摘要: 多重继承很容易带来的一个问题就是歧义的问题: 1 class BorrowAble{ 2 public: 3 void checkOut() const; 4 ... 5 }; 6 class ElectronicGadget{ 7 private: 8 bool check... 阅读全文
posted @ 2015-10-18 17:00 eversliver 阅读(258) 评论(0) 推荐(0) 编辑
摘要: 首先看一下private继承的法则:class之间的继承关系如果是private的话,那么编译器不会将一个derived对象自动当作为一个base class对象。从base class继承而来的所有方法以及属性,在derived class都会变成是private的。private继承的底层含义实... 阅读全文
posted @ 2015-10-18 16:59 eversliver 阅读(217) 评论(0) 推荐(0) 编辑
摘要: 在继承一个virtual函数的时候,如果这个virtual函数同样是有默认值的话,那么其表明这次继承既存在动态绑定也存在静态绑定:例如下面这个例子: 1 class Shape{ 2 public: 3 enum shapeColor{red, green, blue}; 4 vir... 阅读全文
posted @ 2015-10-18 16:57 eversliver 阅读(373) 评论(0) 推荐(0) 编辑
摘要: 重新定义一个继承而来的non-virtual函数可能会使得导致当函数被调用的时候,被调用的函数不是取决于调用的函数究竟属于的对象,而是取决于调用函数的指针或者引用的类型。所以一般的说主要有两种观点在这方面:1. 如果D非要重新继承而来的函数的话,那么说明他们的关系可能是不适合public继承的,因为... 阅读全文
posted @ 2015-10-18 16:56 eversliver 阅读(389) 评论(0) 推荐(0) 编辑
摘要: 有一部分人总是主张virtual函数几乎总应该是private:例如下面这个例子,例子时候游戏,游戏里面的任务都拥有健康值这一属性:class GameCharacter{public: int healthValue()const{ ... int retVal ... 阅读全文
posted @ 2015-10-18 16:55 eversliver 阅读(426) 评论(0) 推荐(0) 编辑
摘要: 在普通的public继承中,实际上也分为接口以及实现继承。首先看下面这个例子: 1 class Shape{ 2 public: 3 virtual void draw() const = 0; 4 virtual void error(const std::string & msg... 阅读全文
posted @ 2015-10-18 16:53 eversliver 阅读(350) 评论(0) 推荐(0) 编辑
摘要: 首先看下下面这个例子:class Base{private: int x;public: virtual void mf1() = 0; virtual void mf2(); void mf3(); ...};class Derived : public Base{p... 阅读全文
posted @ 2015-10-18 16:51 eversliver 阅读(305) 评论(0) 推荐(0) 编辑
摘要: Given two integersnandk, return all possible combinations ofknumbers out of 1 ...n.For example,Ifn= 4 andk= 2, a solution is:[ [2,4], [3,4], [2,3],... 阅读全文
posted @ 2015-10-18 11:26 eversliver 阅读(436) 评论(0) 推荐(0) 编辑
摘要: Write a function to delete a node (except the tail) in a singly linked list, given only access to that node.Supposed the linked list is1 -> 2 -> 3 -> ... 阅读全文
posted @ 2015-10-18 10:19 eversliver 阅读(244) 评论(0) 推荐(0) 编辑