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 Comment

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.

Sign in to comment.

Answers (2)

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 Comments

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.

Sign in to comment.

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 Comments

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.

Sign in to comment.

Asked:

on 15 Nov 2011

Community Treasure Hunt

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

Start Hunting!