>백엔드 개발 >C++ >C의 임시 개체는 언제 삭제되나요?

C의 임시 개체는 언제 삭제되나요?

Susan Sarandon
Susan Sarandon원래의
2024-11-26 09:27:10347검색

When Do Temporary Objects in C   Get Destroyed?

C의 임시 객체 소멸

C의 임시 객체는 언제 소멸되나요? 이 질문은 다음 코드 조각을 고려할 때 발생합니다.

#include <iostream>

struct Foo
{
    const char* m_name;

    ~Foo() { std::cout << m_name << '\n'; }
};

int main()
{
    Foo foo{"three"};
    Foo{"one"};   // unnamed object
    std::cout << "two" << '\n';
}

코드는 "1", "2" 및 "3"을 인쇄합니다. 임시 개체가 생성 직후 삭제된 경우 이 동작은 예상치 못한 것처럼 보일 수 있습니다. 그러나 그렇지 않습니다.

[class.temporary] p4에 정의된 임시 개체는 생성된 지점을 포함하는 전체 표현식이 끝나면 소멸됩니다. 위의 예에서 전체 표현식은 전체 주요 함수이므로 임시 Foo 객체는 세미콜론에서 삭제됩니다.

이 동작은 표준으로 보장되어 C 컴파일러 전체에서 주어진 코드의 출력이 일관되게 됩니다. 그러나 일반 규칙에는 몇 가지 예외가 있습니다.

  • 배열 이니셜라이저의 기본 생성 임시 객체는 수명이 단축될 수 있습니다.
  • 배열 복사 중 생성자에 대한 기본 인수는 다음을 가질 수도 있습니다. 수명이 단축됩니다.
  • 임시 객체에 대한 참조를 바인딩하면 수명이 연장됩니다.
  • 범위 초기화 프로그램의 임시 객체는 수명이 연장됩니다.

위 내용은 C의 임시 개체는 언제 삭제되나요?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

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