บริษัท ที่ฉันทำงานอยู่นั้นกำลังเริ่มต้นโครงสร้างข้อมูลทั้งหมดผ่านฟังก์ชันเตรียมใช้งานเช่น:
//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()
นั้นเหมือนกันทุกประการ