>>109596358
You are confused the meaning of Drop, Copy and heap.
drop works on any value. It's just doesn't do anything for Copy values because they can't be Drop and they get memcpy'd on useanyway. But you can still drop Copy values like >>109596369 shown. However you also do not need heap for drop to be useful. For example:
use core::cell::RefCell;
fn main() {
let cell = RefCell::new(123);
let borrow = cell.borrow();
drop(borrow); // You need this or program will panic
*cell.borrow_mut() += 1;
println!("{}", cell.borrow());
}
Note that I am using core library, there is no heap used here at all. Yet borrow holds a runtime borrow on a cell. You need to manually drop it in order for RefCell to not panic when you borrow_mut it.