开发者

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

开发者 https://www.devze.com 2022-12-28 07:01 出处:网络
suppose the code does the following: T *pointer = new T(); delete static_cast<void*>(pointer); what is result?Undefined, memo开发者_JAVA百科ry leak, memory is deleted?The behavior is undefine

suppose the code does the following:

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

what is result? Undefined, memo开发者_JAVA百科ry leak, memory is deleted?


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).


Deleting via a void pointer is undefined, as is doing anything else via a void pointer except explicitly converting it to another kind of pointer.

0

精彩评论

暂无评论...
验证码 换一张
取 消