危险的对象数组转换

一个指向派生类对象数组的指针是不应该被转换为基类指针的。编译器是允许指针转换的,通常说来,它不知道一个指针是指向一个对象还是指向一个对象数组。问题是当Base指针b增长时,地址根据Base的大小而增加,而Base的大小通常和Derived是不一样的,因此指针对象会指到对象之间的地址。


int main(){

    Derived d[5];

    Based *b = d;

    b ++;

    b->alter();

}

猜你喜欢

转载自blog.csdn.net/dreamslike/article/details/31557301