>백엔드 개발 >C++ >C 개체 인스턴스화: 스택 대 힙: `new` 또는 `new`가 아닌가?

C 개체 인스턴스화: 스택 대 힙: `new` 또는 `new`가 아닌가?

Linda Hamilton
Linda Hamilton원래의
2024-12-02 01:19:13302검색

C   Object Instantiation:  Stack vs. Heap: `new` or Not `new`?

객체 인스턴스화: New 사용 또는 사용 안 함

C에서 객체를 생성할 때 프로그래머는 "new" 연산자를 사용하거나 직접 인스턴스화할 수 있습니다. 그것 없이는. 두 접근 방식 모두 객체를 생성하지만 몇 가지 주요 측면에서 다릅니다.

새 항목 없음

"새 항목" 없이 개체를 인스턴스화하면 현재 범위에서 해당 개체에 대한 메모리가 직접 예약됩니다. 이는 일반적으로 스택에서 수행되며 자동 수명이 있는 개체가 생성됩니다. 개체는 정의된 범위 내에서 자동으로 생성되고 소멸됩니다.

예:

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

위 코드에서 "Time" 개체 "t"가 스택에 생성됩니다. 수명은 현재 범위에 묶여 있습니다.

새로

사용 객체를 인스턴스화하는 "new"는 힙에 동적으로 메모리를 할당합니다. 이를 통해 객체의 수명이 끝나면 객체가 명시적으로 생성되고 소멸될 수 있습니다. 포인터 "t"는 객체의 힙 주소를 저장합니다.

예:

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

여기서 포인터 "t"에는 새로 생성된 "Time"의 힙 주소가 할당됩니다. 물체. 객체의 수명은 범위와 무관하며 "삭제" 연산자를 사용하여 메모리를 해제할 때까지 지속됩니다.

주요 차이점

  • 메모리 할당 : "new" 없이 생성된 객체는 스택에 메모리를 할당하는 반면, "new"는 스택에 메모리를 할당합니다. heap.
  • 수명: "new" 없이 인스턴스화된 객체는 자동 수명을 갖는 반면, "new"로 생성된 객체는 동적 수명을 가지며 수동으로 삭제해야 합니다.

C 표준은 스택 및 힙 동작을 명시적으로 정의하지 않으므로 이러한 차이점은 구현에 따라 다르다는 점에 유의하는 것이 중요합니다. 그러나 대부분의 실제 구현에서는 자동 개체에 스택 메모리가 사용되고 동적 개체에 힙 메모리가 사용됩니다.

위 내용은 C 개체 인스턴스화: 스택 대 힙: `new` 또는 `new`가 아닌가?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

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