내가 일하는 회사는 다음과 같은 초기화 기능을 통해 모든 데이터 구조를 초기화하고 있습니다.
//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()
는 정확히 동일합니다.