जिस कंपनी में मैं काम करता हूं, वह अपने सभी डेटा स्ट्रक्चर्स को इनिशियलाइज़ फंक्शन के जरिए इनिशियलाइज़ कर रही है, जैसे:
//the structure
typedef struct{
int a,b,c;
} Foo;
//the initialize function
InitializeFoo(Foo* const foo){
foo->a = x; //derived here based on other data
foo->b = y; //derived here based on other data
foo->c = z; //derived here based on other data
}
//initializing the structure
Foo foo;
InitializeFoo(&foo);
मैंने अपनी स्ट्रक्चर्स को इस तरह इनिशियलाइज़ करने की कोशिश में कुछ धक्का दिया है:
//the structure
typedef struct{
int a,b,c;
} Foo;
//the initialize function
Foo ConstructFoo(int a, int b, int c){
Foo foo;
foo.a = a; //part of parameter input (inputs derived outside of function)
foo.b = b; //part of parameter input (inputs derived outside of function)
foo.c = c; //part of parameter input (inputs derived outside of function)
return foo;
}
//initialize (or construct) the structure
Foo foo = ConstructFoo(x,y,z);
क्या एक दूसरे के ऊपर एक फायदा है?
मुझे कौन सा करना चाहिए, और मैं इसे बेहतर अभ्यास के रूप में कैसे सही ठहराऊंगा?
InitializeFoo()
एक कंस्ट्रक्टर है। C ++ कंस्ट्रक्टर से एकमात्र अंतर यह है कि this
सूचक स्पष्ट रूप से अंतर्निहित रूप से पारित किया गया है। InitializeFoo()
और इसी C ++ Foo::Foo()
का संकलित कोड बिल्कुल समान है।