Can handle class be used to simulate "Pointer" in C language?

If I define a "Ptr" class as following:
classdef Ptr < handle
properties
data
end
end
then, objects of Ptr will behave like pointers in C language.
Is this true, guys?

1 Kommentar

Why is the "Bytes" 0 in Variable Editor?
The "Bytes" of a field of a struct, or a property of a object, is 0.
Verified on 2008a and 1010b.

Melden Sie sich an, um zu kommentieren.

Antworten (2)

Daniel Shub
Daniel Shub am 15 Nov. 2011

1 Stimme

Objects of the handle class are not identical to pointers. When you pass an object to a function (whether it is a value class or a handle class), MATLAB does not immediately make a copy of the object. It is almost like it passes a pointer (but it is not a pointer). MATLAB has a complicated COW and tries not to copy the object unless it needs to. With a high level language of MATLAB you have to give up some of the control on memory management and hope MATLAB behaves in a reasonable manner.

3 Kommentare

Thanks, Daniel
I agree that MATLAB has its own way to manage memory.
I find another interesting thing that graphics functions, e.g., figure(), return a double number, named graphic handle, but not a figure object.
And I can not figure out where the figure object stored. Is it sotred in currenct workspace? A persistent variable in some functions? Or in a memory segment whose adress only MATLAB knows?
Undocumented Matlab at, http://undocumentedmatlab.com/ , might interest you.
Great website!
Thanks, isakson.

Melden Sie sich an, um zu kommentieren.

Titus Edelhofer
Titus Edelhofer am 15 Nov. 2011
Hi,
"then objects of Ptr will behave like pointers". If the behaviour you mean is that once you change a Ptr, all other variables that "point" to the same object are changed as well, then yes. Example:
x = Ptr;
y = x; % both x and y "point" to the same object
x.data = 2; % now y.data is 2 as well
But I would say that "reference" like the & in C++ comes nearer to what handle classes are ...
Titus

5 Kommentare

Thanks, Titus
I think Pointer is like handle classes more.
You can see it from following code:
>> n1=dlnode(1);
>> n2=n1;
>> n1=dlnode(2);
>> n1
n1 =
Doubly-linked list node with data:
2
>> n2
n2 =
Doubly-linked list node with data:
1
Titus is right here. Its a reference:
The handle class is the superclass for all classes that follow handle semantics. A handle is a reference to an object. If you copy an object's handle, MATLAB copies only the handle and both the original and copy refer to the same object data. If a function modifies a handle object passed as an input argument, the modification affects the original input object.
Oh, I thought Titus reffered to the C++'s reference. My misunderstanding.
I agree that it's a MATLAB's reference, for C++'s reference cannot change its target.
hmm, why not? When you pass an object by reference to a function, the function may change the underlying/referenced object. Of course only, as long as you don't pass a const reference ... Or do I remember entirely wrong, since my C++ programming is about 10 years ago by now ;-).
en, Titus is right.
The only difference between handle class and C++'s reference is, C++'s reference can not change to another value since initialization.

Melden Sie sich an, um zu kommentieren.

Gefragt:

am 15 Nov. 2011

Community Treasure Hunt

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

Start Hunting!

Translated by