dsimcha wrote:
<snip>
1.  Method calls don't need to be virtual.
2.  An instance of a subclass cannot be converted to a final instance of the
base class.
3.  A final instance can be implicitly converted to a non-final instance, but
the opposite would not work.

Using final as an instance attribute like this would also allow another useful
feature:  Storing class instances inline in arrays, structs, or other classes.
 Basically, by marking a class instance as final, you'd be telling the
compiler that you do not need and are not using polymorphism in this case,
even if the class hierarchy uses it for other use cases, and therefore, all
relevant optimizations can be made.

So the class would be contained by value, and method calls would bypass the vtable. Effectively, the class would become more like a struct in these instances.

There are two difficulties I can see:

- either the final instance would still need a vtable to support methods calling each other, or there'd have to be internally two versions of each method - containment by value means that one would have to deal with copying of instances, in ways that you wouldn't have to worry about if you were using the same class normally.

Stewart.

Reply via email to