Annex F (informative)
Core undefined behavior
[ub]
F.3
[expr]
: Expressions
[ub.expr]
F.3.25
[ub:expr.delete.dynamic.array.dynamic.type.differ]
Specified in:
[expr.
delete]
1
#
In an array delete expression, if the dynamic type of the object to be deleted differs from its static type, the behavior is undefined
.
2
#
[
Example
1
:
struct
B
{
virtual
~
B
(
)
;
void
operator
delete
[
]
(
void
*
, std
::
size_t
)
;
}
;
struct
D
:
B
{
void
operator
delete
[
]
(
void
*
, std
::
size_t
)
;
}
;
void
f
(
int
i
)
{
D
*
dp
=
new
D
[
i
]
;
delete
[
]
dp;
// uses
D::operator delete[](void*, std::size_
t)
B
*
bp
=
new
D
[
i
]
;
delete
[
]
bp;
// undefined behavior
}
—
end example
]