>백엔드 개발 >C++ >`new` 대 `new`가 아닌 객체 인스턴스화: 주요 기능적 차이점은 무엇입니까?

`new` 대 `new`가 아닌 객체 인스턴스화: 주요 기능적 차이점은 무엇입니까?

Mary-Kate Olsen
Mary-Kate Olsen원래의
2024-12-06 22:41:12746검색

`new` vs. Non-`new` Object Instantiation: What are the Key Functional Differences?

객체 인스턴스화: 'new' 대 'new'가 아닌'

메모리 할당 외에도 다음 줄 사이에는 어떤 기능적 차이점이 존재합니까? 코드?

Time t (12, 0, 0); //t is a Time object

Time* t = new Time(12, 0, 0);//t is a pointer to a dynamically allocated Time object

비'새' 인스턴스화

첫 번째 줄인 Time t (12, 0, 0);는 로컬 범위에서 Time 유형의 변수 t를 생성합니다. 이 변수는 일반적으로 스택에 할당되며 해당 범위의 끝에서 삭제됩니다.

'new' 인스턴스화

반면, 두 번째 줄 Time* t = new Time(12, 0, 0);, 일반적으로 ::operator new() 또는 Time::operator new()를 통해 힙에 메모리 블록을 할당합니다. 기능. 그런 다음 이 메모리 블록은 새로 할당된 메모리의 주소가 this 포인터로 설정된 Time::Time() 생성자를 사용하여 초기화됩니다. 할당된 메모리에 대한 포인터는 변수 t에 저장됩니다.

기타 차이점

주요 차이점은 메모리 할당에 있지만 몇 가지 미묘한 차이점이 있습니다.

  • 수명: '새'가 아닌 객체에는 자동 저장 기간이 있습니다. 즉, 범위가 끝나면 자동으로 삭제됩니다. 반면 '새' 객체는 동적 저장 기간을 가지며 메모리를 회수하려면 명시적으로 삭제해야 합니다.
  • 범위 지정: '새' 객체가 아닌 객체는 로컬 범위 내에서 정의되고 존재합니다. '새' 개체는 프로그램 스택 외부에 할당되며 특정 범위에 국한되지 않습니다.
  • 소유권: '새' 개체에 대한 메모리는 명시적으로 관리되어야 하며 관련 포인터는 안전하게 역참조되어야 합니다. '새' 객체가 아닌 객체는 컴파일러에 의해 자동으로 관리되므로 명시적인 메모리 정리가 필요하지 않습니다.

위 내용은 `new` 대 `new`가 아닌 객체 인스턴스화: 주요 기능적 차이점은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.