As an example, we talked about file handles. They shouldn’t leak, so we build a struct for them, like
struct File {
file_desc: uint,
}
If we destructure this struct, we do lose the destruction, thus we have to clean it up ourselves. But in my opinion, this is no different from the unsafety that arises when we could arbitrarily construct the struct, as we could construct it without owning the relevant resources, like in this case the file handle. This would lead to even more unsafety than omitting the destructor, as we might accidently close a file descriptor that another thread owns.
Similarily for the builtin struct Vec:
struct Vec<T> {
len: uint,
cap: uint,
ptr: *mut T,
}
When we destructure this (thus preventing the destructor from running, the only thing that’s bad is that we have to handle deallocation ourselves. If we however construct this with a pointer we don’t own, we again run into real problems.