zoukankan      html  css  js  c++  java
  • Effective C++ 避免数组多态

     1 #include <iostream>
     2 #include <cstdlib>
     3 
     4 using namespace std;
     5 
     6 class Base {
     7     public:
     8         int idx;
     9         Base(int _idx=0) : idx(_idx) {}
    10         
    11         void show() {cout<<"Base"<<idx<<endl;}
    12         void print() {cout<<idx<<endl;}
    13 };
    14 
    15 class Derive : public Base {
    16     public:
    17         int time[20];
    18         Derive(int _idx = 0) : Base(_idx) {}
    19         void show() {cout<<"Derive"<<endl;}
    20 };
    21 
    22 void traversal(Base a[], int n) {
    23     for (int i=0; i < n; i++) {
    24         a[i].show();
    25     }
    26 }
    27 
    28 void deleteArray(Base a[]) {
    29     delete[] a;
    30 }
    31 
    32 int main() {
    33     Derive d[10];
    34     traversal(d, 10);
    35     
    36     deleteArray(d);
    37     
    38     system("pause");
    39     return 0;
    40 }

     delete[] a 将发生错误,因为编译器根据Base类型的大小来计算数组a中的各个元素的偏移地址再调用其析构函数,但是传入的实际上是Derive类型因而当程序运行时并不能得到元素正确的偏移,从而程序崩溃。

    这个不说以前还真没这么想过

  • 相关阅读:
    vim编辑器
    Linux实用命令
    EhCache缓存页面、局部页面和对象缓存
    微信公众号开发之获取微信用户的openID
    23种设计模式概要及易懂的例子
    CSS Hack
    BOM之navigator对象和用户代理检测
    动态脚本
    DOM遍历
    DOM范围
  • 原文地址:https://www.cnblogs.com/lailailai/p/3657532.html
Copyright © 2011-2022 走看看