• C/C++学习之基础-001


    1.C++虚函数的工作原理

      虚函数(virtual function)需要虚函数表(virtual table)才能实现。如果一个类有函数声明成虚拟的,就会生成一个虚函数表,存放这个类的虚函数地址。若子类没有覆写虚函数,该子类的虚函数表就会存放父类的函数地址。调用这个虚函数时,就会通过虚函数表解析函数的地址。在C++中,动态绑定(dynamic bindding)就是通过虚函数表机制实现的。

    2.深拷贝和浅拷贝的区别

      浅拷贝会将对象所有成员的值拷贝到另一个对象里。使用浅拷贝时,必须非常小心,只有当我们知道自己在做什么时才可选用浅拷贝。多数情况下,使用浅拷贝是为了传递一块复杂结构的信息,但又不想真的复制一份数据。使用浅拷贝时,销毁对象也必须非常小心。

      深拷贝除了拷贝所有成员的值,还会进一步拷贝所有的指针对象。

      在实际开发中,浅拷贝很少使用。大部分情况都应该使用深拷贝,特别是当需要拷贝的结构很小时。

     1 struct Test
     2 {
     3      char * ptr; 
     4 };
     5 
     6 void shallowCopy(Test & src , Test & dest)
     7 {
     8    dest.ptr =  src.ptr;  
     9 }
    10 
    11 void deepCopy(Test & src , Test & dest)
    12 {
    13     dest.ptr = (char * )  malloc(strlen(src.ptr) + 1 );
    14     strcpy(dest.ptr , src.ptr);  
    15 }

    3.C语言的关键字“volatile”的作用

      关键字volatile的作用是指示编译器,即使代码不对变量做任何改动,该变量的值仍可能会被外界修改。操作系统、硬件或其他线程都有可能修改该变量。该变量的值有可能遭受意料之外的修改。所以,每次使用时,编译器都会重新从内存中获取这个值。

      volatile的整数声明语句:

    1 int volatile x;
    2 volatile int x;

      声明指向volatile整数的指针:

    volatile int *  x;
    int volatile *  x;

      指向非volatile数据的volatile指针很少见,但也是可行的:

    int * volatile x;

      如果声明指向一块volatile内存的volatile指针变量(指针本身与地址所指向的内存都是volatile),volatile变量不会被优化掉。

    int volatile * volatile x;

      volatile变量在多线程程序里很有用,对于全局变量,任意线程都可能修改这些共享的变量。我们可能不希望编译器对这些变量进行优化,我们就可以使用volatile关键字。

    4.C++基类的析构函数声明为virtual的原因

      确保正确调用继承关系最末端的子类的析构函数。

  • 相关阅读:
    js生成点阵字体
    随笔
    html5 textarea 的 placeholder 换行的几种方式
    有物不知其数,三三数之剩二,五五数之剩三,七七数之剩二。问物几何?
    javascript 水仙花数
    避免url传值字符串sjstr过长,使用from表单【隐藏域】post提交
    图表转换
    highcharts 显示点值的效果
    导出报表
    JQuery ----文档处理
  • 原文地址:https://www.cnblogs.com/lrh-xl/p/5247466.html
Copyright © 2020-2023  润新知