virtual destructor fail using array

前端 未结 1 1171
梦谈多话
梦谈多话 2021-01-01 00:37

I found this code on a web site

#include 

using namespace std;

struct Base
{
    Base() { cout << \"Base\" << \" \"; }
    virt         


        
相关标签:
1条回答
  • 2021-01-01 00:48
    Base *bq = new Der[5];
    delete [] bq;   // this causes runtime error
    

    The reason is arrays are not treated polymorphically. Therefore, in the above code, the delete statement invokes undefined behaviour.

    §5.3.5/3 C++03 says

    In the first alternative (delete object), if the static type of the operand is different from its dynamic type, the static type shall be a base class of the operand’s dynamic type and the static type shall have a virtual destructor or the behavior is undefined. In the second alternative (delete array) if the dynamic type of the object to be deleted differs from its static type, the behavior is undefined.

    You're lucky that it gives runtime-error, and you got the opportunity to know a serious bug in your code, as soon as possible.

    0 讨论(0)
提交回复
热议问题