雕刻时光

just do it……nothing impossible
  博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理

2013年12月2日

摘要: 1. 编译器的优化在本次线程内, 当读取一个变量时,为提高存取速度,编译器优化时有时会先把变量读取到一个寄存器中;以后,再取变量值时,就直接从寄存器中取值;当变量值在本线程里改变时,会同时把变量的新值copy到该寄存器中,以便保持一致。当变量在因别的线程等而改变了值,该寄存器的值不会相应改变,从而造成应用程序读取的值和实际的变量值不一致。当该寄存器在因别的线程等而改变了值,原变量的值不会改变,从而造成应用程序读取的值和实际的变量值不一致。2.volatile应该解释为“直接存取原始内存地址”比较合适,“易变的”这种解释简直有点误导人。加上volatile 实际上就直接从内存中读取,避免了被编译 阅读全文

posted @ 2013-12-02 19:16 huhuuu 阅读(345) 评论(0) 推荐(0) 编辑

摘要: 实践出真理!#include#includeclass A{public:A(); virtual~A(); virtual void fun1(){ printf("A:fun1"); } virtual void fun2(){ printf("A:fun2"); }};A::A(){}A::~A(){ printf("Delete class A\n");}class B : public A{public:B(); ~B(); void fun1(){ ... 阅读全文

posted @ 2013-12-02 18:07 huhuuu 阅读(1156) 评论(0) 推荐(0) 编辑

摘要: 1.构造函数能否声明为虚函数: 构造函数不能声明为虚函数,虚函数对应一个vptr,可是这个vptr其实是存储在对象的内存空间的。问题出来了,如果构造函数是虚的,就需要通过 vptr来调用,可是对象还没有实例化,也就是内存空间还没有,怎么找vptr呢?所以构造函数不能是虚函数。(而且现在VS的编译器一般也会报错)。2.析构函数能否声明为虚函数:析构函数可以声明为虚函数,而且有时是必须声明为虚函数,是因为删除指向派生类的基类指针的时候,如果析构函数不是虚函数,派生类的析构函数将不会被执行,直接后果的内存泄漏!!!3.能否在构造函数里面调用虚函数:编译不会报错,但是最好不要这样做!在调用构造这时候类 阅读全文

posted @ 2013-12-02 15:42 huhuuu 阅读(1061) 评论(0) 推荐(0) 编辑

摘要: #include#includeusing namespace std;class base1{public: base1(){ printf("start base1\n"); } ~base1(){ printf("end base1\n"); }private: int mx,my; int mi,mj;};class base2:public base1{public: base2(){ printf("start base2\n"); } ~base2(){ ... 阅读全文

posted @ 2013-12-02 09:42 huhuuu 阅读(320) 评论(0) 推荐(0) 编辑