c++ - Design: Singleton, many pointers or a global variable -
im programming in c++ , have design question:
i have class a
( , need 1 instance in programme ) contains array of class b
. , each b
calls fellow member functions of a
.
i can figure out 3 solutions, wich have disadvantages:
1. global variable, wich "bad" ( according )
class b; class { private: static const int b_total = 5; b m_array[ b_total ]; public: void foo() { printf( "foo" ); } void do_stuff() { for( int = 0; < b_total; i++ ) { m_array[ ].bar(); } } }; global_a; class b { public: void bar() { global_a.foo(); } }; int main() { global_a.do_stuff(); homecoming 0; }
2. pointer on a
in ervery b
, causes more need of memory ( if have more 5 bs )
class b; class { private: static const int b_total = 5; b m_array[ b_total ]; public: a() { for( int = 0; < b_total; i++ ) { m_array[ ].set_pa( ); } } void foo() { printf( "foo" ); } void do_stuff() { for( int = 0; < b_total; i++ ) { m_array[ ].bar(); } } }; class b { public: void bar() { m_pa->foo(); } void set_pa( *pa ) { m_pa = pa; } private: *m_pa; }; int main() { mya; mya.do_stuff(); homecoming 0; }
3. or a
singleton. impact performance because in every get_instance()
phone call have check if m_pinstance == null
class b; class { private: static const int b_total = 5; b m_array[ b_total ]; static *m_pinstance; a() { } public: static *get_instance() { if( m_pinstance == null ) m_pinstance = new a(); homecoming m_pinstance; } void foo() { printf( "foo" ); } void do_stuff() { for( int = 0; < b_total; i++ ) { m_array[ ].bar(); } } }; *a::m_pinstance = null; class b { public: void bar() { a::get_instance()->foo(); } }; int main() { a::get_instance()->do_stuff(); delete a::get_instance(); homecoming 0; }
is there design should prefered ( , why )? please help me :p
you said,
i have class a
( , need 1 instance in programme ) contains array of class b
. , each b
calls fellow member functions of a
.
this candidate singleton pattern.
you said,
but impact performance because in every get_instance()
phone call have check if m_pinstance == null
this can avoided using static
variable in get_instance()
.
static *get_instance() { static theinstance; homecoming &theinstance; }
this has side benefit of not needing call
delete a::get_instance();
c++ performance pointers design singleton
No comments:
Post a Comment