[ET Trac] [Einstein Toolkit] #477: Carpet commit f33caf3aba96 (hg) breaks timer output in CCTK_Terminate

Einstein Toolkit trac-noreply at einsteintoolkit.org
Tue Jul 19 17:32:19 CDT 2011


#477: Carpet commit  f33caf3aba96 (hg) breaks timer output in CCTK_Terminate
---------------------+------------------------------------------------------
  Reporter:  rhaas   |       Owner:  eschnett
      Type:  defect  |      Status:  review  
  Priority:  major   |   Milestone:          
 Component:  Carpet  |     Version:          
Resolution:          |    Keywords:          
---------------------+------------------------------------------------------

Comment (by rhaas):

 Apparently the order of destruction is the reverse order of construction
 (which is useful to know):
 http://www.parashift.com/c++-faq-lite/dtors.html#faq-11.2
 http://stackoverflow.com/questions/2254263/order-of-member-constructor-
 and-destructor-calls
 or formally:
 http://www.open-std.org/jtc1/sc22/WG21/docs/papers/2011/n3242.pdf
 (stackoverflow has section numbers)
 so multiple timers are fine it seems.

 As for references: (as I understand it) if getName() returned a reference
 and a user assigned this to a reference and then deleted the owning
 TimerNode then the reference would be a dangling pointer (essentially).
 Something like
 {{{
   char *a = new char('a');
   char &b = *a;
   delete a;
   std::cout << b << std::endl;
 }}}
 will segfault (or not...).

 If on the other hand you assign to a string then copying takes place (even
 if a reference is returned) and everything is fine. In the case where you
 return a string object but the user assigns to a reference I think you end
 up with an invalid reference right away, and g++ will not even compile it:

 {{{
 #include <string>
 #include <iostream>

 std::string blurp("blah");
 std::string blah() { return blurp; }

 int main()
 {
   std::string &foo = blah();
   return 0;
 }
 }}}

 So my approach would be that the segfault can only occur the user assign
 to a reference in which case the user knows what she is doing and we
 supply her with sufficient rope to hang herself if she so chooses :-)

 But as you say, it very likely makes no difference at all unless one times
 very short, local functions.

-- 
Ticket URL: <https://trac.einsteintoolkit.org/ticket/477#comment:8>
Einstein Toolkit <http://einsteintoolkit.org>
The Einstein Toolkit


More information about the Trac mailing list