小编kil*_*s90的帖子

Rust 的 Trait 对象如何处理移动实例的方法?

以下是我对 Rust 方法如何工作的基本假设:

foo.method();
Run Code Online (Sandbox Code Playgroud)

其中method定义为method(&self)并且foo是 的一个实例Foo,

Foo::method(&foo);
Run Code Online (Sandbox Code Playgroud)

我对 Trait Objects 的理解是一个有两个空指针的结构,一个指向数据,另一个指向函数指针(vtable)

接受 Trait 对象并调用该 Trait 对象上的方法的多态函数将编译为查看 Trait 对象中方法的偏移量并传入数据指针

但是如果该方法移动了实例呢?如果我错了,请纠正我,但要调用虚拟移动方法,该函数必须将存储在 Trait 对象中的实际数据推送到堆栈上,而不仅仅是数据指针。显然在编译时无法知道数据大小,那么这里发生了什么?这是 VLA 类型的情况,还是我误解了移动的工作原理?

methods polymorphism vtable rust

2
推荐指数
1
解决办法
40
查看次数

标签 统计

methods ×1

polymorphism ×1

rust ×1

vtable ×1