Base *bq = new Der[5];
delete [] bq; // this causes runtime error
The reason is that arrays are not processed polymorphically. Therefore, in the above code, the operator deleteinvokes undefined behavior .
§5.3.5 / 3 C ++ 03 says
( ), , , undefined. ( ), , undefined.
, , .