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
