Search code examples
c++castingdelete-operator

C++ delete static_cast<void*> (pointer) behavior


suppose the code does the following:

T *pointer = new T();
delete static_cast<void*>(pointer);

what is result? Undefined, memory leak, memory is deleted?


Solution

  • The behavior is undefined. Concerning the delete expression, the C++ standard 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. (§5.3.5/3)

    Then the footnote to this paragraph clearly states:

    This implies that an object cannot be deleted using a pointer of type void* because there are no objects of type void (note 73).