새로운 기능이없는 C ++ 개체
이것은 정말 간단한 질문이지만 몇 년 동안 C ++를 제대로 수행하지 않았기 때문에 이것에 약간 당황합니다. 또한, 인터넷에서 검색하는 것이 (적어도 나에게는) 가장 쉬운 일이 아닙니다.
new
키워드를 사용하지 않는 이유는 무엇 이며 어떻게 작동합니까?
기본적으로 여기서 무슨 일이 일어나고 있습니까?
CPlayer newPlayer = CPlayer(position, attacker);
이 표현 :
CPlayer(position, attacker)
CPlayer
위의 생성자를 사용하여 유형의 임시 객체를 만든 다음 :
CPlayer newPlayer =...;
언급 된 임시 객체는 복사 생성자를 사용하여 newPlayer
. 더 나은 방법은 임시를 피하기 위해 다음을 작성하는 것입니다.
CPlayer newPlayer(position, attacker);
위의 코드는 스택에 CPlayer 객체를 생성하므로 new
. new
힙에 CPlayer 객체를 할당하려는 경우 에만 사용해야 합니다. 힙 할당을 사용하는 경우 코드는 다음과 같습니다.
CPlayer *newPlayer = new CPlayer(position, attacker);
이 경우 우리는 일치하는 호출로 정리해야하는 CPlayer 객체에 대한 포인터를 사용하고 있습니다 delete
. 스택에 할당 된 개체는 범위를 벗어나면 자동으로 삭제됩니다.
실제로 작성하는 것이 더 쉽고 분명했을 것입니다.
CPlayer newPlayer(position, attacker);
어쨌든 많은 컴파일러가 위에 게시 한 버전을 최적화하고 읽기가 더 명확합니다.
CPlayer newPlayer = CPlayer(position, attacker);
이 줄은 CPlayer 유형의 새 로컬 개체를 만듭니다. 기능과 같은 외관에도 불구하고 이것은 단순히 CPlayer의 생성자를 호출합니다. 임시 또는 복사는 포함되지 않습니다. newPlayer라는 이름의 개체는 포함 된 범위만큼 유지됩니다. new
C ++가 Java가 아니기 때문에 여기서 키워드를 사용하지 않습니다 .
CPlayer* newPlayer = new CPlayer(position, attacker);
이 줄은 힙에 CPlayer 객체를 생성하고이를 가리키는 newPlayer라는 포인터를 정의합니다. 개체는 누군가가 사용할 때까지 살아 delete
있습니다.
newPlayer는 동적으로 할당 된 변수가 아니라 자동 스택 할당 변수입니다.
CPlayer* newPlayer = new CPlayer(pos, attacker);
~와 다르다
CPlayer newPlayer = CPlayer(pos, attacker);
newPlayer는 일반적인 CPlayer (position, attacker) 생성자 호출을 통해 스택에 할당되지만 평소보다 다소 장황합니다.
CPlayer newPlayer(pos, attacker);
기본적으로 다음과 같이 말하는 것과 같습니다.
int i = int(3);
참고 URL : https://stackoverflow.com/questions/1764831/c-object-without-new
'Program Tip' 카테고리의 다른 글
Colspan이 Angular 2에서 알려진 기본 속성이 아닌 이유는 무엇입니까? (0) | 2020.11.24 |
---|---|
"int * p = + s;"는 무엇입니까? (0) | 2020.11.24 |
기능을 삭제하지 않고 specflow (Gherkin)에서 기능을 비활성화하려면 어떻게합니까? (0) | 2020.11.24 |
브라우저에서 JavaScript가 처리 할 수있는 개체 크기의 한계에 도달 했습니까? (0) | 2020.11.24 |
Android MVVM 디자인 패턴 예제 (0) | 2020.11.24 |