new로 할당된 개체 초기화
선택적 이니셜라이저 필드가 new 연산자의 문법에 포함되므로 사용자 정의 생성자를 사용하여 새 개체를 초기화할 수 있습니다. 초기화 수행 방법에 대한 자세한 내용은 이니셜라이저를 참조하십시오. 다음 예제에서는 new 연산자와 함께 초기화 식을 사용하는 방법을 보여 줍니다.
// expre_Initializing_Objects_Allocated_with_new.cpp
class Acct
{
public:
// Define default constructor and a constructor that accepts
// an initial balance.
Acct() { balance = 0.0; }
Acct( double init_balance ) { balance = init_balance; }
private:
double balance;
};
int main()
{
Acct *CheckingAcct = new Acct;
Acct *SavingsAcct = new Acct ( 34.98 );
double *HowMuch = new double ( 43.0 );
// ...
}
이 예제에서 CheckingAcct 개체가 new 연산자를 사용하여 할당되지만 기본 초기화가 지정되지 않습니다. 따라서 클래스의 기본 생성자인 Acct()가 호출됩니다. 그런 다음 명시적으로 34.98로 초기화된다는 점을 제외하고 SavingsAcct 개체가 같은 식으로 할당됩니다. 34.98은 double 형식이므로 초기화를 처리하기 위해 해당 형식의 인수를 사용하는 생성자가 호출됩니다. 마지막으로 비클래스 형식 HowMuch가 43.0으로 초기화됩니다.
개체가 클래스 형식이고 해당 클래스에 생성자(이전 예제와 같음)가 있으면 다음 조건 중 하나가 충족될 경우에만 new 연산자를 사용하여 개체를 초기화할 수 있습니다.
이니셜라이저에 제공된 인수는 생성자의 인수와 일치합니다.
클래스에 기본 생성자(인수 없이 호출할 수 있는 생성자)가 있습니다.
he constructors according to the rules set forth in 모호성 및 특수 멤버 함수를 사용한 초기화에 명시된 규칙에 따라 operator new 및 생성자에 대해 액세스 제어와 모호성 제어가 수행됩니다.
new 연산자를 사용하여 배열을 할당할 때 요소마다 명시적으로 초기화할 수 없습니다. 기본 생성자만 호출됩니다(있을 경우). 자세한 내용은 기본 인수를 참조하십시오.
메모리 할당이 실패할 경우(operator new가 0값 반환) 초기화를 수행하지 않음으로써 존재하지 않는 데이터를 초기화하려는 시도를 막을 수 있습니다.
함수 호출과 마찬가지로 초기화된 식이 계산되는 순서가 정의되지 않습니다. 또한 메모리 할당을 수행하기 전에 완전히 계산되는 이 식에 의존하지 마십시오. 메모리 할당이 실패하고 new 연산자가 0을 반환하면 이니셜라이저의 일부 식이 완전히 계산되지 않을 수도 있습니다.