- 论坛徽章:
- 2
|
本帖最后由 cdsfiui 于 2016-06-24 11:12 编辑
绝对不要以多态方式处理数组(More Effective c++),它说的是处理数组的时候,因为有指针偏移量的运算,所以Derived类的内容被当成Base类的内容使用的时候,计算出来的偏差是不正确的,所以,我用VC做了一个实验:
- struct B{
- int i = 2;
- virtual ~B(){ cout << "B dtor\n"; }
- };
- struct D :B{
- int j = 3;
- int k = 4;
- int l = 5;
- ~D(){ cout << "D dtor\n"; }
- };
- void f(B* pb,size_t s)
- {
- for (size_t i = 0; i < s; ++i)
- cout << pb[i].i << endl;
- }
- int main()
- {
- B* pb = new D;
- delete pb;
- B* p2 = new D[2];
- f(p2,2);
- D buf[2];
- f(buf, 2);
- delete[] p2;
- return 0;
- }
复制代码 用VC编译运行没有问题,GCC运行就崩溃(在delete[]这句)。为什么 |
|