美文网首页
C++面向对象高级编程(上)笔记二(Boolan)

C++面向对象高级编程(上)笔记二(Boolan)

作者: CarmenS233 | 来源:发表于2018-01-15 09:31 被阅读0次

    1.   Big Three

    拷贝构造           拷贝赋值          析构函数

    只要类里带指针,就必须带拷贝构造和拷贝赋值。

    2.析构函数

    释放掉动态分配的内存。

    注意创建的指针要释放

    3.拷贝构造(copy ctor)

    如果没有特别写,编译器默认形成   两个指针指向同一块地方   即浅拷贝。

    会造成内存泄漏,和别名。

    先创建一块足够大小的内存,再进行拷贝。

    4.拷贝赋值

    先把原来的空间清空,重新分配足够的空间,再赋值过来。

    检测自我赋值

    先检查一下两个指针指的是不是同一个地方,效率高。

    如果没有检测,结果可能会出错:假如两个指针指向同一个地方,第一步会删掉原有空间里的数据,接下来就无法正常进行。

    5.stack(栈),heap(堆)

    c1    用完会自动消失

    p      要自己亲手delete

    6.各对象的生命期

    stack 生命期:只要离开作用域,它的生命就会结束,析构函数就会被调用。auto object

    static local objects 生命期:作用域结束之后仍然存在,直到整个程序结束。

    global objects生命期:整个程序结束之后才结束

    heap objects生命期:delete之后结束,防止内存泄漏。

    7.new:先分配memory,再调用ctor

    第一步:调用内存,内部调用malloc(n)

    第二步:把第一步得到的指针转型

    第三步:调用其构造函数

    8.delete:先调用dtor,再释放memory

    第一步:调用析构函数

    第二步:释放内存,其内部调用free()

    9.动态分配所得的内存块

    上下cookie:4*2,记录整块所给的大小,回收时方便知道要回收多少。

    调试模式下:上面8,下面1,           8*4+1*4

    本身分配的:complex   8   ,          string      4

    总共分配16的倍数

    10.动态分配所得的array

    除了以上三个部分,VC会再用1个用来记录数组成员数,即+4

    11.array new 一定要搭配 array delete

    一定要加[ ],这样编译器才知道是一个数组,会调用三次;如果不加[ ],只调用一次。

    补充:

    1.static   静态

    静态函数没有*this,只能处理静态的数据,静态的函数。

    黄色的部分意为定义,是必要的。

    2.把ctors放在private区

    Sigleton

    Meyers Singleton:把static放进函数中更好

    3.cout

    类型:ostream

    4.class template,类模板

    这么用

    5.function template,函数模板

    6.namespace

    使用方法:

    全部打开 一条一条声明

    相关文章

      网友评论

          本文标题:C++面向对象高级编程(上)笔记二(Boolan)

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