Anders Logg wrote:
> On Wed, Apr 23, 2008 at 11:24:33PM +0200, Martin Sandve Alnæs wrote:
>> Dag recently discussed issues with object ownership in the context of
>> Vector and DiscreteFunction. Are there any existing general
>> conventions for this in DOLFIN? It's not easy to know which function
>> arguments will be kept references to, which will be assumed ownership
>> of and later deleted, and which return value pointers you yourself
>> should assume ownership of.
>>
>> In the absense of reference counting, the least we should do is agree
>> on some conventions to make this easier, and be very careful to
>> document this next to each relevant function. However, doing this
>> requires some overview of many parts of the code, so it's not quickly
>> done. I guess this should be thought of during the Function cleanup?
> 
> As a first rule, we never assume responsibility for data given as
> pointers/references. So if you do
> 
>   Foo foo(mesh);
> 
> then that means foo needs to have access to the mesh but does not
> assume responsibility for deleting it.
> 
> Then there are exceptions to this rule. For example, when doing
> 
>   Function u = w[0];
>   Function p = w[1];
> 
> Here u and p will be responsible for their own vectors since no one
> explicitly creates those vectors.
> 
> Then there's also the recent exception Dag added.
> 
> In general, I think we should let C++ be C++, which means I don't
> think it's a good idea to use smart pointers everywhere.
> 

Are there other classes that have the property of DiscreteFunction that 
they may or may not be responsible for freeing the pointers they contain?

I agree with Martin that these are fragile sections of code that warrant 
careful documentation. In addition, I would suggest _strong_ 
encapsulation (no friendship). E.g., it seems safest that a 
DiscreteFunction knows whether it will own dof data or not when it is 
constructed, and not let any other object manipulate this property later.

The patch I submitted (Anders, will you accept it?) for LinearPDE is not 
in line with this (I would prefer in the future that the 
constructor/init of DiscreteFunction initializes the proper vector and 
assumes ownership of it).

/Dag
_______________________________________________
DOLFIN-dev mailing list
[email protected]
http://www.fenics.org/mailman/listinfo/dolfin-dev

Reply via email to