2017-12-11 9 views
1

동일한 클래스 개체의 포인터 배열을 초기화하려고합니다. 여기서 클래스는 다음과 같습니다 nullptr로 같은 클래스의 객체의 정적 포인터 배열을 초기화하는 방법은 무엇입니까?

class Correspondent{ 
    private: 
     static Correspondent *correspondent[maxCorrespondents]; 
} 

나는 contsructor에 노력했다. 하지만 매번 초기화됩니다. 이 변수를 정의하는 하나의 변환 유닛

Correspondent::Correspondent(string n,string c) { 
    name = n; 
    country = c; 
    for(int i=0;i<=maxCorrespondents;i++){ 
     correspondent[i] = NULL; 
    } 
} 

답변

1

: 다야

Correspondent* Correspondent::correspondent[maxCorrespondents]{}; 

. 이 집계는 배열을 초기화하고 각 배열은 기본적으로 각 포인터를 초기화합니다. 그리고 포인터는 기본형이기 때문에 0으로 초기화하고 모두 nullptr으로 설정합니다.

1

정적 저장 기간이있는 객체는 항상 0으로 초기화됩니다. 따라서 correspondent 어레이는 추가 코드를 작성하지 않고 0으로 채워집니다.

0.10 [dcl.init] 정적 저장 기간의 모든 오브젝트는 다른 초기화가 수행되기 전에, 프로그램 시작시에 제로 - 초기화된다.

class Correspondent 
{ 
    private: using Correspondents = ::std::array<Correspondent *, maxCorrespondents>; 
    private: static Correspondents correspondents; 
}; 

Correspondent::Correspondents Correspondent::correspondents; 
:

은 또한 그것은 ::std::array 래퍼를 사용하고 배열 선언의 중복 및 정의를 피하기 위해 형식 별칭을 소개하는 것이 좋습니다 수 있습니다