2013-06-02 3 views
5

Cprogramming.com에서 무작위 페이지를 살펴보고 자습서/예제 페이지 Constructors and Destructors에 주목했습니다. 그들은 생성자를 정의하는 다음과 같은 방법을 사용하고 있습니다 :이 생성자 정의의 이점은 무엇입니까

나는 마법 this 포인터를 생성자의 좋은 구식 정의를 사용하고
class String 
{ 
    private: 
     char *str; 
     int size; 
    public: 
     String() : str(NULL), size(0) { } // <- This statement 
     String(int size) : str(NULL), size(size) { // <- And this one 
      str = new char[size]; 
     } 
} 

:

String() { 
    this->str = NULL; 
    this->size = 0; 
} 
String(int size) { 
    this->size = size; 
    this->str = new char[size]; 
} 

은 추가 혜택이 있나요 명백한 작은 코드 (줄 수가 적음) 옆의 첫 번째 선언에서?

PS : 마지막으로 C++로 무언가를 작성한 지 꽤 오래되었습니다.

+1

http://stackoverflow.com/questions/926752/why-should-i-prefer-to-use-member-initialization-list –

답변

11

사람들은 constructor initialization lists, 그리고 기본 타입에 대한 할당보다는 초기화를 기반으로 당신이하는 데 사용되는 형태에 대한 차이가 없습니다.

그러나, 사용자 정의 유형 사이에서 (아마도 및 의미) 성능면에서 차이가있을 수있다 :

  1. 기본적 구성 다음 목적 및 을에 값을 할당하고,
  2. 그 값으로 직접 초기화합니다.

또한, 기본-작도되지 않는 다른를 초기화 멤버 초기화 목록을 사용하는 것보다 그 유형에 대한 선택의 여지가 없어, 당신은 const에 대한 선택의 여지가 참조 멤버 중 하나, 즉 반드시하지 않습니다 즉시 초기화됩니다. C++에서

0

건설 객체는 세 단계로 수행됩니다

  1. 메모리는
  2. 생성자가 실행을 초기화
  3. 회원 변수를 aquired된다.

생성자 정의 String() : str(NULL), size(0) {} 2 단계는, 그러나 그럼에도 불구하고 실행 3. 단계 2

생성자 정의 String() { this->str = NULL; this->size = 0; } 단계에서이를 수행의 변수에 대해 적절한 값을 할당한다. 따라서 멤버 변수에 적절한 값을 할당하는 이러한 종류의 방법은 효율성이 떨어집니다.

1

나는 옛날 콜라주 지식으로이 사용법이 이상하게 보였습니다. 그러나이 기술을 사용하면 사용자 정의 클래스 구현이 런타임에 더 나은 성능을 제공한다는 것을 이해해야합니다. 그리고 here은 C++의 아버지로부터 시작 목록에 대한 긴 설명입니다.

관련 문제