美文网首页
GEEKBAND面向C++下第二周

GEEKBAND面向C++下第二周

作者: 太帅JUE人 | 来源:发表于2016-11-02 22:38 被阅读0次

    虚指针和虚表 vptr vtbl

    QQ图片20161102195640.png
    • vptr:虚指针,内存占用4字节,只要类里面有虚函数,就会产生指针,如左图,一万个虚函数也会一个指针,对比数据相加会多4,而且不管有多少虚函数,都会只有一个虚指针。
    • vtbl:虚表,放置虚函数的地方,虚指针指向虚表。

    静态绑定

    • 译器生成 cal xxxx 语句l

    动态绑定

    • 指针调用
    • 向上转型(猪向动物)
    • 调用虚函数
    (*p->vptr[n])(p) //n是虚表中存放的位置
    
    

    关于this

    • 所有的成员函数一定有个隐藏的this pointer
    CDocument::OnFileOpen(&myDoc)  &myDoc就是this
    
    

    Const

    • const 对象只能调用const成员函数
    • non-const对象可以调用const成员函数和non-const成员函数
    • non-const 成员函数可以调用const成员函数,反之则不行
    • 成员函数的const和non-const版本同时存在:const object只能调用const版本,non-const object只能调用non-const版本

    关于new和delete

    String* ps = new String("hello");
    //转为
    void* mem = operator new(sizeof(String));
    ps = static_cast<String*>(mem);
    ps->String::String("hello);
    

    重载::operator new delete

    • 接管使用者行为、全局new 和delete,掌管内存分配

    以上为全局重载


    成员 operator new delete

    • 接管成员函数的new delete重载,做一个内存尺
    • 对于某个类重载其operator new/delete的函数,可以只针对这个类使用自定义的内存管理。
    class Foo 
    {
        public: 
          void* operator new(size_t); 
          void operator delete(void*, size_t); 
    };
    Foo* pf = new Foo;//调用重载
    delete pf;
    Foo* pf = ::new Foo;//使用全局
    
    
    • 数组形式同理

    new() delete()


    这段没有搞太懂 ………………~


    basic_string

    • 用来扩充余量

    相关文章

      网友评论

          本文标题:GEEKBAND面向C++下第二周

          本文链接:https://www.haomeiwen.com/subject/pvsmuttx.html