一个指向派生类对象数组的指针是不应该被转换为基类指针的。编译器是允许指针转换的,通常说来,它不知道一个指针是指向一个对象还是指向一个对象数组。问题是当Base指针b增长时,地址根据Base的大小而增加,而Base的大小通常和Derived是不一样的,因此指针对象会指到对象之间的地址。
int main(){
Derived d[5];
Based *b = d;
b ++;
b->alter();
}
一个指向派生类对象数组的指针是不应该被转换为基类指针的。编译器是允许指针转换的,通常说来,它不知道一个指针是指向一个对象还是指向一个对象数组。问题是当Base指针b增长时,地址根据Base的大小而增加,而Base的大小通常和Derived是不一样的,因此指针对象会指到对象之间的地址。
int main(){
Derived d[5];
Based *b = d;
b ++;
b->alter();
}