雕刻时光

just do it……nothing impossible
  博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理
上一页 1 ··· 13 14 15 16 17 18 19 20 21 ··· 50 下一页

2013年12月5日

摘要: 在编写派生类的赋值函数时,注意不要忘记对基类的数据成员重新赋值。#include#include#include#include#includeusing namespace std;class Base{private: int x,y;public: Base& operator =(const Base &other){ x=other.x; y=other.y; printf("Base operator\n"); return *this; } Base(){ x=0;y=0; ... 阅读全文

posted @ 2013-12-05 21:32 huhuuu 阅读(430) 评论(0) 推荐(0) 编辑

摘要: #include#include#include#include#includeusing namespace std;class mystring{public: mystring(const char *str=NULL); mystring(const mystring &other); ~mystring(void); mystring &operator=(const mystring &other); mystring &operator+=(const mystring &other); char *getString();private: 阅读全文

posted @ 2013-12-05 19:35 huhuuu 阅读(234) 评论(0) 推荐(0) 编辑

摘要: #includeusing namespace std;class Obj{public : Obj(){coutInit(); //~~~~~ a->Destroy(); free(a);}void new_test(){ Obj * a=new Obj; delete a;}int main(){ malloc_test(); new_test();}除了前者是函数,后者是标识符的区别外前者是在C语言中诞生的,用于内存分配但是不会执行构造函数与析构函数。(这里没有继承,要是有继承关系,用free就难以处理从派生类到基类的析构了,内存泄露在所... 阅读全文

posted @ 2013-12-05 14:08 huhuuu 阅读(438) 评论(0) 推荐(0) 编辑

2013年12月3日

摘要: 前段时间一直想看malloc的原理,在搜了好几篇malloc源码后遂放弃,晦涩难懂。 后来室友买了本深入理解计算机系统的书,原来上面有讲malloc的原理,遂看了,先明白理论,在看代码就理解比较快了= = 1.问题的引入: 为什么要使用malloc,主要是因为在代码中,为了节约内存,很多数据都是动态生成的,所以会用malloc,对应于C++中的new,底层还是调用malloc. 2.碎片的问题: 会有内部碎片与外部碎片的问题,内部碎片难以消除(因为字对齐之类的问题),而外部碎片是可以消除的(如果不消除的话,外部的内存块越来越小,虽然数量多了,但是利用率会急剧下降!) 3.需... 阅读全文

posted @ 2013-12-03 22:34 huhuuu 阅读(13897) 评论(1) 推荐(3) 编辑

摘要: //位图的概念就是在个一字节八位的地方存八个状态比如 bool hash[] 表示某个数字被标记过,一个数字需要一个字节而bitMap就是可以把每位都用来标记,起到节约空间的目的//位图的概念就是在个一字节八位的地方存八个状态#includechar s[100]; // 范围0~799void bitmap(int n){ int insert=n/8; int insertbit=n%8; s[insert]|=(1<<insertbit);}int findBitmap(int n){ int insert=n/8; int insertbit=n%8; ... 阅读全文

posted @ 2013-12-03 10:46 huhuuu 阅读(243) 评论(0) 推荐(0) 编辑

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) 编辑

2013年12月1日

摘要: 析构函数的作用与构造函数正好相反,是在对象的生命期结束时,释放系统为对象所分配的空间,即要撤消一个对象。用对象指针来调用一个函数,有以下两种情况:如果是虚函数,会调用派生类中的版本。(在有派生类的情况下)如果是非虚函数,会调用指针所指类型的实现版本。析构函数也会遵循以上两种情况,因为析构函数也是函数嘛,不要把它看得太特殊。 当对象出了作用域或是我们删除对象指针,析构函数就会被调用。当派生类对象出了作用域,派生类的析构函数会先调用,然后再调用它父类的析构函数, 这样能保证分配给对象的内存得到正确释放。但是,如果我们删除一个指向派生类对象的基类指针,而基类析构函数又是非虚的话, 那么就会先调用基类 阅读全文

posted @ 2013-12-01 22:11 huhuuu 阅读(10612) 评论(0) 推荐(0) 编辑

上一页 1 ··· 13 14 15 16 17 18 19 20 21 ··· 50 下一页