"일꾼이 일을 잘하려면 먼저 도구를 갈고 닦아야 한다." - 공자, 『논어』.
첫 장 > 프로그램 작성 > C++ 개체 인스턴스화: 스택 대 힙: `new` 또는 `new`가 아닌가?

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

2024년 12월 21일에 게시됨
검색:770

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

"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 표준은 스택 및 힙 동작을 명시적으로 정의하지 않기 때문에 이러한 차이점은 구현에 따라 다르다는 점에 유의하는 것이 중요합니다. 그러나 대부분의 실제 구현에서는 자동 객체에 스택 메모리가 사용되고 동적 객체에 힙 메모리가 사용됩니다.

최신 튜토리얼 더>

부인 성명: 제공된 모든 리소스는 부분적으로 인터넷에서 가져온 것입니다. 귀하의 저작권이나 기타 권리 및 이익이 침해된 경우 자세한 이유를 설명하고 저작권 또는 권리 및 이익에 대한 증거를 제공한 후 이메일([email protected])로 보내주십시오. 최대한 빨리 처리해 드리겠습니다.

Copyright© 2022 湘ICP备2022001581号-3