For a pointer pointing to an object outside of its lifetime,
behavior is undefined if the object will be or was of a class type
with a non-trivial destructor
and the pointer is used as the operand of a delete-expression.
[Example 1: struct S {float f =0;
~S(){}};
void f(){
S* p =new S;
p->~S();
delete p; // undefined behavior, operand of delete, lifetime has ended and S// has a non-trivial destructor} — end example]