/// This method is called implicitly when the value goes out of scope,
/// and cannot be called explicitly (this is compiler error [E0040]).
/// However, the [`mem::drop`] function in the prelude can be
/// used to call the argument's `Drop` implementation.
评论区
写评论我人傻了,《已解决》,人才!
已解决也不要删除啊,给后来人做参考。
自实现drop是让做释放内存之外的额外的事情,可以参考c++的析构函数
Drop这个trait本身就被标记为
#[lang = "drop"]
。按我的理解,Drop这个trait本身是所有释放内存的操作本身,这个操作的实现是由标记提示,由编译器本身实现的。所有scope结束自动释放内存,就是由于隐式调用了Drop这个trait。至于mem::drop
,这个的源码就是直接把变量移入一个scope,当scope结束时自动调用了Drop这个trait,然后内存释放。自行实现的Drop,只是让你在Drop时可以做一些操作,而不是让你手动释放内存。这个释放内存的过程是在Drop这个函数隐式调用结束以后,编译器自己释放的。
thanks;
--
👇
caohaiwd: 和c++一样,在调用完自定义drop后,子变量自己会drop
和c++一样,在调用完自定义drop后,子变量自己会drop