- https://www.mathworks.com/help/matlab/matlab_oop/supporting-both-handle-and-value-subclasses-handlecompatible.html?searchHighlight=handlecompatible%20%20attribute&s_tid=srchtitle_support_results_2_handlecompatible%2520%2520attribute
- https://www.mathworks.com/matlabcentral/answers/631669-are-handle-classes-the-fastest-containers?s_tid=srchtitle
- https://www.mathworks.com/matlabcentral/answers/2013932-what-exactly-are-handle-compatible-classes-are-they-a-combination-of-handle-and-non-handle-classes?s_tid=srchtitle
Why is it necessary/useful to have a HandleCompatible attribute?
1 次查看(过去 30 天)
显示 更早的评论
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?
0 个评论
回答(2 个)
Riya
2023-9-6
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!
10 个评论
Bruno Luong
2023-9-7
Shouldn't be since a trillion graphic handles working in various graphical display would be catastrophic.
Catalytic
2023-9-7
编辑:Catalytic
2023-9-7
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.
0 个评论
另请参阅
类别
在 Help Center 和 File Exchange 中查找有关 Environment and Settings 的更多信息
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!