c++ - Simulation Class Design -
i'm looking simulations complicated initial conditions user. i'm writing class a member variables need initialized user before running a.solve() results stored in file. initialization rather complicated , requires several temporary data structures no longer needed after initialization. so, wrote class called class initializer stores reference object of class a. code this:
class { friend class initializer; private: // member variables storing state of system public: void solve(); ... }; class initializer { private: a& // other data structures used in initialization ... public: // functions called user set initialization ... initialize(); // after called, ready solve }; int main(...) { a; initializer init(a); // call functions on init initialize system ... init.initialize(); a.solve(); return 0; } but seems data structures in init live on stack entire program. prevent that, ok this:
a; initializer *init = new initializer(a); .... init.initialize(); delete init; a.solve(); or unnecessary , should have contained in class a?
to answer original line of thought, usual solution restrict scope of init variable:
a a; { initializer init(a); //... } // init destroyed scope exits a.solve(); your new/delete variant quite brittle , leak memory if throws between new , delete. fix that, use smart pointers:
a a; std::unique_ptr<initializer> init(new initializer(a)); //... init.reset(); a.solve(); however others have said, whole design kinda weird , overkill. if initialization complicated can't away constructors may want other way around: instead of initializer taking argument a , operating on it, should pass ready-to-use initializer a's constructor, in turn either copy whole initializer keep copy of data, or copy relevant bits. initializer should renamed config or that. notice how config/initializer object can reused initialize several a objects, , modified between 2 a initializations.
unfortunately hard give definitive advice little information.
note: if use c++11 may interested in std::initializer_list enables new brace-initialization syntax. depending on complexity of data may involve more work current solution you'll end nice , intuitive syntax.
Comments
Post a Comment