When we say "virtual dispatch" in Rust we mean the same thing as it means in C++, which is that there exists a vtable in which the function pointer is looked up at runtime from a known offset. It grants more flexibility and less binary bloat than static dispatch, but requires an additional pointer indirection and can present barriers to inlining (though LLVM is impressively smart with its devirtualization abilities at times).