I am far from being an expert C++ (or OOP) programmer still, so probably some
of my needs look (or are) naive.
This looks related to the old discussion of a 'scoped' attribute for class
members, but it's a different thing, more about the semantics of the code and
less about how the compiler implements things.
Sometimes I feel the need for something (usable on class/struct/enum members)
to tag a member as "owned" by the class instance. This attribute is useful only
for reference attributes, like objects, structs managed by pointer, associative
arrays and dynamic arrays. This attribute is purely a type system thing, the
compiled code doesn't change. It just disallows some kinds of code, shown
below. The purpose of @owned is to hopefully avoid some bugs.
class Foo {}
class Bar {
@owned private int[] array;
@owned private f Foo;
public int[] giveArray() {
return array; // error, a dup is required
}
public void receiveArray(int[] a) {
array = a; // error, a dup is required
}
public Foo giveFoo() {
return f; // error
}
public void receiveFoo(Foo ff) {
f = ff; // error
}
}
If array is owned by Bar, then "return array;" is a compile-time error because
the memory of the array is only owned by Bar; returning a slice or reference is
not allowed.
Is it possible to implement this @owned, and is it a good thing to have?
Bye,
bearophile