< 返回版块

sstudioer 发表于 2021-02-18 10:41

评论区

写评论
Mark 2021-02-20 09:49

我人傻了,《已解决》,人才!

Mike Tang 2021-02-18 21:29

已解决也不要删除啊,给后来人做参考。

kkonghao 2021-02-18 15:11

自实现drop是让做释放内存之外的额外的事情,可以参考c++的析构函数

eweca 2021-02-18 13:51

Drop 这个trait的源码注释如是说道:

    /// 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这个trait本身就被标记为#[lang = "drop"]。按我的理解,Drop这个trait本身是所有释放内存的操作本身,这个操作的实现是由标记提示,由编译器本身实现的。所有scope结束自动释放内存,就是由于隐式调用了Drop这个trait。至于mem::drop,这个的源码就是直接把变量移入一个scope,当scope结束时自动调用了Drop这个trait,然后内存释放。

自行实现的Drop,只是让你在Drop时可以做一些操作,而不是让你手动释放内存。这个释放内存的过程是在Drop这个函数隐式调用结束以后,编译器自己释放的。

作者 sstudioer 2021-02-18 10:53

thanks;

--
👇
caohaiwd: 和c++一样,在调用完自定义drop后,子变量自己会drop

caohaiwd 2021-02-18 10:47

和c++一样,在调用完自定义drop后,子变量自己会drop

1 共 6 条评论, 1 页