Why is it necessary/useful to have a HandleCompatible attribute?

2 views (last 30 days)
Setting HandleCompatible=true in a value class doesn't seem to change its behavior in any way, other than to allow it to "mate" with handle classes to form subclasses. What purpose therefore does it serve to have a HandleCompatible attribute at all? Why not let ordinary value classes mate freely with handle classes?

Answers (2)

Riya on 6 Sep 2023
Hello Matt J,
As per my understanding, you want to know the purpose of using ‘HandleCompatible attribute.
Please note that, the `HandleCompatible` attribute in MATLAB value classes serves a specific purpose related to the memory management and behavior of objects. By default, value classes in MATLAB are designed to be lightweight and operate on a copy-by-value principle. This means that when you assign a value class object to a new variable or pass it as an argument to a function, a new copy of the object is created.
On the other hand, handle classes in MATLAB are designed to be reference-based and operate on a copy-by-reference principle. When you assign a handle class object to a new variable or pass it as an argument to a function, the new variable or function argument points to the same underlying object in memory.
The `HandleCompatible` attribute allows you to create value classes that behave like handle classes, enabling them to be passed by reference rather than by value. This can be useful in scenarios where you want to avoid the overhead of copying large objects or when you want multiple variables or functions to refer to the same object.
However, it is important to note that allowing ordinary value classes to mate freely with handle classes could lead to unexpected behavior and potential issues with memory management. Value classes are designed to be lightweight and immutable, whereas handle classes have different memory management considerations and can be modified. Mixing the behavior of value classes and handle classes without proper restrictions could result in unintended consequences and make the code harder to reason about.
By providing the `HandleCompatible` attribute, MATLAB allows you to explicitly choose which classes should behave like handle classes, providing a clear distinction between value and handle semantics. This helps maintain the expected behavior of value classes while still allowing you to create reference-based objects when needed.
You can also refer the following documentation to know more about 'HandleClasses':
I hope it helps!
Matt J
Matt J on 7 Sep 2023
Edited: Matt J on 7 Sep 2023
Maybe, but what is "all the other stuff" that would be considered heavy baggage?
Bruno Luong
Bruno Luong on 7 Sep 2023
Shouldn't be since a trillion graphic handles working in various graphical display would be catastrophic.

Sign in to comment.

Catalytic on 7 Sep 2023
Edited: Catalytic on 7 Sep 2023
Maybe because in some cases you may want a class to have copy-by-reference semantics but you want its subclasses to have regular copy-by-value semantics? The HandleCompatible attribute of a value class is not automatically inherited by subclasses, whereas all subclasses of handle must have copy-by-reference semantics.


Find more on Graphics Object Programming in Help Center and File Exchange




Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!