> 백엔드 개발 > C++ > C에서 `new` 연산자를 언제 사용하고 피해야 합니까?

C에서 `new` 연산자를 언제 사용하고 피해야 합니까?

Susan Sarandon
풀어 주다: 2024-12-04 12:48:11
원래의
569명이 탐색했습니다.

When Should I Use (and Avoid) the `new` Operator in C  ?

C에서 "new"를 사용하고 피해야 하는 경우

C에서 객체를 인스턴스화할 때 "new"를 언제 사용하는지 이해하는 것이 중요합니다. " 연산자와 그렇지 않은 경우. 이러한 구별은 C# 또는 Java에서 전환하는 프로그래머에게 특히 중요합니다.

정의된 범위의 변수에 "new"를 사용하지 마세요

객체를 함수나 루프와 같은 특정 범위에서는 "new"를 사용할 필요가 없습니다. 대신 다음 예와 같이 객체를 직접 선언하십시오.

void foo() {
  Point p = Point(0,0);
} // p is destroyed when foo() exits
로그인 후 복사

수명이 정의되지 않은 객체에는 "new"를 사용하세요.

객체를 그대로 유지하려면 명시적으로 삭제될 때까지 존재하는 경우 "new"를 사용하십시오. 다음과 같이 수명이 결정되지 않은 객체의 경우입니다.

  • 반환해야 하는 함수에 의해 동적으로 할당된 객체.
  • 사용자 지정 할당자가 관리하는 메모리에 할당된 객체.
  • 크기가 결정되는 배열 Runtime.

예:

Point* p1 = new Point(0, 0); // Allocates p1 on the heap
...
delete p1; // Explicitly deallocates p1 when done
로그인 후 복사

변수와 포인터의 차이점

변수에 "new" 사용(Point*에서와 같이) p1 = new Point(0, 0);)은 오해의 소지가 있습니다. 실제로 힙에 개체를 할당하지 않습니다. 대신 개체에 대한 포인터를 할당합니다. 객체 자체는 제자리에 할당된 상태로 유지됩니다. 이는 클래스 내에서 멤버 변수를 생성할 때만 표시됩니다.

클래스 멤버에 대한 내부 할당

클래스 인스턴스가 생성될 때 클래스 멤버가 자동으로 할당됩니다. 이를 "내부" 할당이라고 합니다. 예:

class Foo {
  Point p;
}; // p is allocated within Foo objects
로그인 후 복사

성능 고려 사항

"new"로 개체를 할당하는 것은 내부 할당보다 비용이 더 많이 듭니다. 성능 최적화를 위해 사용을 최소화하는 것이 좋습니다.

결론

"new"를 사용할 때와 사용하지 않을 때를 이해하는 것은 C에서 메모리를 효과적으로 관리하는 데 중요합니다. 이러한 지침을 따르면 메모리 누수 및 성능 문제를 방지하고 코드의 안정성과 효율성을 보장할 수 있습니다.

위 내용은 C에서 `new` 연산자를 언제 사용하고 피해야 합니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
저자별 최신 기사
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿