2014-12-23 14 views
0

최근 프로젝트에 참여했으며 프로젝트의 기본 인터페이스 클래스 중 하나에 아래 초기화가 있습니다.초기화 초기화 목록이 아닌 생성자 범위에서 초기화

위와 같이 m_git_ptr을 초기화하면 어떤 장점이 있습니까? 감사.

+2

장점 :이 이상한 초기화가 필요한 숨겨진 종속성이 없으면 아무 것도 없습니다. 단점 : 당신은 뭔가 다른 일을 할 수있는 동안 무언가에 대해 생각하는 시간을 낭비하고 있습니다. (숨겨진 의존성 등이없는 한 ...) – juanchopanza

답변

1

단점은 두 가지 다른 방법으로 두 번 초기화된다는 것입니다. 최적화 컴파일러가 첫 번째 할당을 제거하므로 성능 문제는 아니지만 코드 가독성 문제입니다. 하나의 스타일을 골라서 붙이십시오.

이러한 경우
class CCom_Itf 
{ 
    m_git_ptr = nullptr; // in-class init 
... 

의 수준의 초기화가 무시됩니다 : C++ 11에 "더블 초기화"이런 종류가 최강의 멤버 초기화와 함께, 패션으로 다시 온다

주 생성자에 동일한 멤버가있는 초기화 목록이있는 경우 그러나 이런 종류의 이중 초기화는 피할 수없는 것 같습니다.

0

소스 코드의 성격 당 지불하지 않는 이상이 이상한 초기화 할당 댄스에는 이점이 없습니다.

단순하고 일정하지 않은 멤버의 경우 단점은 간단합니다. 필요한 것보다 더 많은 코드를 작성하고 컴파일러를 사용하여 댄스를 단일 초기화 (, 아마도 작은, 성능에 영향을 미치지 않는 경우).

더 복잡한 유형의 경우, default-initialisation을 따르는 할당이 직접 초기화보다 많은 작업 일 수 있기 때문에 성능 비용이 발생할 수 있습니다. 유형을 할당 할 수 없거나 구성원이 const으로 선언 된 경우 댄스가 전혀 작동하지 않습니다.

+0

"소스 코드의 성격 당 지불되고 있습니다"라는 좋은 특징이 있습니다! –