문제

대부분의 사람들이 말 예외를 아웃의 소멸하고 그 결과에서 정의되지 않은 행동이다.이후 지점을 "벡터 소멸자를 명시적으로 호출의 소멸에 대한 모든 요소입니다.이것이 의미하는 요소가 있는 경우 소멸,발생합 벡터 파괴 실패...진짜로 좋은를 보호하는 방법에 대하여 발생한 예외에서 소멸자,그래서 라이브러리에 어떠한 보증도 하지 않습니다면 요소를 소멸자 발생"(에서 부록 E3.2).

이 문서 고 말할 것 같으면 던지는 것 소멸자가 더 많거나 적은 괜찮습니다.

그래서 제 질문은 이 던지는 경우 소멸자에서 결과에서 정의되지 않은 행동을,당신은 어떻게 처리하는 동안 발생하는 오류를 소멸자가?

중 오류가 발생하면 정리 작업을 수행,당신은 그것을 무시?는 경우는 오류를 처리할 수 있습까지 스택지 오른쪽에 소멸하지 않는 의미를 던지는 예외의 소멸?

분명 이러한 종류의 오류로는 드물지만 가능합니다.

도움이 되었습니까?

해결책

던지는 예외의 소멸자가 위험합니다.
는 경우 다른 예외가 이미 전파 응용 프로그램이 종료됩니다.

#include <iostream>

class Bad
{
    public:
        // Added the noexcept(false) so the code keeps its original meaning.
        // Post C++11 destructors are by default `noexcept(true)` and
        // this will (by default) call terminate if an exception is
        // escapes the destructor.
        //
        // But this example is designed to show that terminate is called
        // if two exceptions are propagating at the same time.
        ~Bad() noexcept(false)
        {
            throw 1;
        }
};
class Bad2
{
    public:
        ~Bad2()
        {
            throw 1;
        }
};


int main(int argc, char* argv[])
{
    try
    {
        Bad   bad;
    }
    catch(...)
    {
        std::cout << "Print This\n";
    }

    try
    {
        if (argc > 3)
        {
            Bad   bad; // This destructor will throw an exception that escapes (see above)
            throw 2;   // But having two exceptions propagating at the
                       // same time causes terminate to be called.
        }
        else
        {
            Bad2  bad; // The exception in this destructor will
                       // cause terminate to be called.
        }
    }
    catch(...)
    {
        std::cout << "Never print this\n";
    }

}

이것은 기본적으로 귀결하기:

아무것도 위험한(i.e는 던질 수 있는 예외)수행해야를 통해 공공법(이하지 않은 직접).사용자의 클래스할 수 있는 그런 다음 잠재적으로 처리하여 이러한 상황을 사용하여 공공 방법 및길을 끄는 모든 잠재적인 예외가 있습니다.

그런 다음 소멸자가 마무리하는 개체를 호출하여 이러한 방법(사용자가하지 않았다 그래서 명시적으로)지만,어떤 예외를 던져 잡아서 떨어(하려고 시도하는 후 문제를 해결하).

그래서 당신은 효과 책임을 전달하에 사용됩니다.는 경우에는 사용자가 위치에 올바른 예외들을 수동으로 해당 기능과 프로세스는 어떤 오류가 있습니다.는 경우에는 사용자의 개체 걱정하지 않습(객체가 파괴 될 것이다)다음 소멸자에 왼쪽 고객님의 비즈니스를 관리하십시오.

예를 들어:

std::fstream

Close()메소드할 수 있습니다.소멸자 전화 close()경우 파일을 열었습니다 그러나 확인하는 예외로 전파하지 않습의 소멸자.

그렇다면 사용자의 파일체 하고 싶은 특별한 처리에 대한 문제에 관련된 파일을 닫고 그들은 수 close()를 호출하고 처리하는 모든 예외가 있습니다.는 경우에 다른 손으로 그들은 걱정하지 않는 다면 소멸자 남아 있을 것입 취급하는 상황이다.

스코트 마이어스에는 다양한 문서를 주제에 대한 그의 책에서"효과적인 C++"

편집:

분명히 또한"에서 더 많은 효과적인 C++"
항목 11:을 방지하는 예외에서 떠나 소멸자

다른 팁

밖으로 던지기의 소멸에서 발생할 수 있습기 때문에,충돌이 소멸자라고 할 수 있의 일환으로"스택 해제".스택 해제 절차는 경우 예외가 발생합니다.이 절차에서,모든 개체가 밀어 스택으로부터"시도"그 때에 예외가 발생했습니다,종료됩->그들의 소멸자가 호출됩니다.고 이 절차를 수행하는 동안,다른 예외를 던지는 것은 허용되지 않기 때문에 그것을 가능하지 않을 처리하는 두 가지 예외가 시간에 따라서 이것을 자극 할 것이 전화를 중단()프로그램이 충돌하고 통제으로 돌아갑니다.

구분 여기에서 대신의 맹목적으로 다음 일반 에 대한 조언 경우입니다.

다음 를 무시 문제의 용기의 개체고 무엇을 할 수의 얼굴에 여러 개의 d'tors 내부 개체의 컨테이너입니다.(그리고 그것을 무시할 수 있는 부분적으로,어떤 객체로는 더 좋은 적합하며,용기에 넣어.)

전체적인 문제는 쉽게 된에 대해 생각할 때 우리는 분할에서 클래스 두 가지 유형이 있습니다.클래스 dtor 있을 수 있는 두 개의 서로 다른 책임

  • (R)릴리스 의미론(일명 무료는 메모리)
  • (C) commit semantics(aka flush 파일이 디스크)

만약 우리가 보기 질문은 이 방법으로,다음을 생각할 수 있다는 주장(R)의미야을 일으키지 않는 예외에서 dtor 이 있으므로)아무것도 우리는 그것에 대해 할 수 있고 b)다양한 무료 리소스 작업하지 않을 제공합한 오류 검사,예를 들어, void free(void* p);.

체(C)의미론,같은 파일을 필요로 하는 목표를 성공적으로 플러시의 데이터 또는("범위를 지키")데이터베이스 연결 없 commit 에 dtor 은 다른 종류의:리 에 대해 뭔가 오류의(애플리케이션 레벨에서)우리는 정말로 계속하면 아무 일도 없었다.

만약 우리가 따라 RAII 팅 및 수 있는 개체에 대한(C)의미론에서 자신의 d'tors 생각 우리는 또한 다음을 허용해야의 이상한 경우에는 그 d'tors 던질 수 있습니다.그것이 다음과 같이 해야되지 않을 넣어 같은 개체로 콘테이너 및 그것은 또한 다음과 같이 프로그램할 수 있도 terminate() 는 경우 commit-dtor 발생하는 동안 또 다른 예외가 활성화됩니다.


과 관련하여 오류 처리(Commit/롤백을 의미)와 예외하고,좋은 이야기에 의해 하나 안드레이 Alexandrescu: 오류 처리에서는 C++/선언적 흐름 제어 (에서 개최 NDC2014)

에서 세부 정보,그는 방법에 대해 설명합 리석 라이브러리를 구현하는 UncaughtExceptionCounterScopeGuard 도구가 있습니다.

(나가 참고해야 다른 사람 또한 비슷한 아이디어.)

는 동안 이야기하지 않에 초점을 던지기에서 d'tor 보여 사용할 수 있는 도구 오늘 의 제거 문제 때를 던져 d'tor.

, 기 수 std 기능에 대한 이 N3614,토론 그것에 대해.

Upd'17:C++17std 기능에 대한 이 std::uncaught_exceptions afaikt.나는 빠르게 인용 cppref 문서

Notes

예를 들어 int-로 돌아 uncaught_exceptions 사용은......첫째 를 만듭니다드 객체와의 수를 기록하고 포착되지 않는 예외 에서 그것의 생성자입니다.출력에 의해 수행되는 감시체의 소멸하지 않는 한 foo()throws(이 경우의 번호를 포착되지 않는 예외에서 소멸자보다 큰 무엇이 생성자 관찰)

실 묻는 질문에 대해 던지기에서 소멸자는"무엇을 할 수 있는 발신자 이?" 은 거기에 실제로는 아무것도 유용 할 수 있는 제외한 것이라고,오프셋 위험에 의해 만들어 던지기에서 소멸자가?

면을 파괴 Foo 체고 Foo 소멸자 토스는 제외,내가 무엇을 합리적으로 할 수 있나요?내가 로그인할 수 있는것,또는 나는 무시할 수 있습니다.습니다.나는 할 수 없습니다"수정"이기 때문에, Foo 객체가 이미 사라졌다.최고의 경우,로그를 제외하고 계속으로는 아무 일도 하지 않으면(또는 프로그램).는 정말 가치가 있으로 정의되지 않은 행동으로 던지기에서 소멸자가?

위험 하지만 그것 또한 의미가 없에서 가독성이/코드의 관점에서 이해할 수 있음.

당신이 무엇을 요청하는 이 상황에서

int foo()
{
   Object o;
   // As foo exits, o's destructor is called
}

무엇을 해야 하는 예외를 catch?해야 호출자의 foo?또 foo 처리하나요?해야하는 이유는 발신자의 foo 관리에 대한 일부 개체 내부 foo?가 방법이 있을 수도 있습니다 언어를 정의 이해,그러나 그가 읽고 이해하기 어렵습니다.

더 중요한 것은,어디 메모리에 대한 개체 go?어디 메모 개체가 소유 go?그것은 여전히 할당(표면적으로하기 때문에 실패한 소멸자)?또한 고려의 객 스택의 공간, 다,그래서 그는 분명히 갈 수 없습니다.

그런 다음 이를 고려하는 경우

class Object
{ 
   Object2 obj2;
   Object3* obj3;
   virtual ~Object()
   {
       // What should happen when this fails? How would I actually destroy this?
       delete obj3;

       // obj 2 fails to destruct when it goes out of scope, now what!?!?
       // should the exception propogate? 
   } 
};

을 때의 삭제 obj3 실패하면,어떻게 실제로 삭제하는 방법으로상을 실패하지 않?그 나의 메모리길!

이제에서 고려하는 첫 번째 코드 개체가 자동으로 멀리기 때문에 스택에서는 동안 Object3 에 힙.이 포인터를 Object3 은 사라지고,당신의 종류 등이 있습니다.이 있는 메모리 누수가 발생합니다.

지금은 하나의 안전한 방법으로 할 것은 다음

class Socket
{
    virtual ~Socket()
    {
      try 
      {
           Close();
      }
      catch (...) 
      {
          // Why did close fail? make sure it *really* does close here
      }
    } 

};

또한 이 FAQ

ISO 초안을 위한 C++(ISO/IEC JTC1/SC22N4411)

그래서 소멸자는 일반적으로 캐치하지 예외 그들에게 전파의 소멸자.

3 프로세스의 통화에 대한 소멸자는 자동체 건설에에서 경로를 시도하는 블록을 버 표현은"스택 해제." [참고:는 경우에는 소멸자는 동안 호출 스택 해제 출구로 예외는 std::종료하라고(15.5.1).그래서 소멸자는 일반적으로 캐치하지 예외자 그들은 전파의 소멸자.—end 참고]

귀하의 소멸자가 될 수도 내에서 실행되는 체인의 다른 소멸자입니다.를 던지지 않는 예외하여 즉각적인 발신자가 다음을 수행할 수 있습니다 떠나는 여러 개체에 일관성이 없는 상태에 따라서 더 많은 문제가 다음을 무시하고 오류에 정리 작업입니다.

다른 사람들은 왜 설명을 던지는 소멸자는 끔찍한...에 대해 무엇을 할 수 있습니다?만약 당신이 하는 작업이 실패할 수 있습니다,별도의 공공법을 수행하는 정리와 던질 수 있는 임의의 예외가 있습니다.대부분의 경우,사용자는 무시됩니다.는 경우 사용자가 원하 모니터링하는 성공/실패의 정리,그들은 단순히 명시적인 정리 루틴입니다.

예를 들어:

class TempFile {
public:
    TempFile(); // throws if the file couldn't be created
    ~TempFile() throw(); // does nothing if close() was already called; never throws
    void close(); // throws if the file couldn't be deleted (e.g. file is open by another process)
    // the rest of the class omitted...
};

라인에 추가적으로 주요 응답하는,좋은 포괄적이고 정확하고 싶 의견에 대한 문서를 참조 하이 말하는"던지는 예외에서 소멸자가 그렇게 나쁜".

이 문서는 라인은"대안은 무엇인을 던지는 예외",그리고 목록에 몇 가지 문제가 각각의 대안입니다.행하는 데 그래서 그는 것으로 결론지었기 때문에 우리를 찾을 수 없습니 문제가 대안 우리가 던지고 계속 예외가 있습니다.

문제입니다 아무도 문제의 목록과 함께 사용할 수 있는 방법은 근로 나쁜 예외로 행동하자,기억,"정의되지 않은 행동이 귀하의 프로그램입니다."일부의 저자의 반대에는"심미적으로 추"및"격려하는 나쁜 스타일"입니다.이제는 것을 원합니까?프로그램과 함께 스타일,또는 하나의 전시 정의되지 않은 행동은?

나는 그룹에서는 고려되는"범위가드"패턴 던지기에서 소멸이 많은 상황에서 유용-특히 장치를 테스트합니다.그러나 알고 있어야에서는 C++11,던지기에서 소멸자가 결과를 통화 std::terminate 이후로 소멸자는 암시적으로 주석으로 noexcept.

Andrzej Krzemieński 한 게시물에 주제의 소멸자는 던져:

그는 포인트는 C++11 하는 메커니즘을 가지고 있습니다 기본 noexcept 에 대한 소멸자:

C++11 에서 소멸자는 암시적으로 지정 noexcept.는 경우에도 추가 사양을 정의하는 소멸자가 다음과 같다:

  class MyType {
        public: ~MyType() { throw Exception(); }            // ...
  };

컴파일러는 여전히 보이지 않게 추가 사양 noexcept 귀하의 소멸자.이 의미는 순간의 소멸자 예외가 발생 std::terminate 될 것이다,라고가 없는 경우에도 두 번은 예외는 상황이다.만약 당신이 정말로 결정할 수 있도록 소멸자를 던지를 지정해야 합니다 이는 명시적으로;당신은 세 가지 옵션:

  • 명시적으로 지정한 당신의 소멸자로 noexcept(false),
  • 을 상속하는 클래스에서 다른 하나에는 이미 지정적으로 소멸자 noexcept(false).
  • 을 넣어 비정적 데이터 구성원에서 당신의 클래스는 이미 지정적으로 소멸자 noexcept(false).

마지막으로,당신이 결정하는 경우에 던져 소멸자,당신은 항상 위험을 잘 알고 있어야의 예외(던지는 동안 스택은 여유를 즐기 때문에 예외).이렇게 하면 전화 std::terminate 그것은 거의 당신이 원하는 것.이를 방지하기 위해 행동할 수 있는 단순히 체크인이 이미 있는 경우에는 예외 던지기 전에 새로운 하나를 사용하여 std::uncaught_exception().

Q:그래서 제 질문은 이우 던지기에서 소멸자에서 결과 정의되지 않은 행동을 어떻게 처리 는 동안 발생하는 오류를 소멸자가?

A:몇 가지 옵션이 있습니다:

  1. Let 예외의 흐름을 소멸에 관계없이,다른 곳에서 발생하는 일.및에서 그렇게 알고 있어야로(또는 두려운)는 std::terminate 을 수행 할 수 있습니다.

  2. 시키지 않는 예외의 흐름을 소멸자.될 수 있습 쓰기 로그,큰 붉은 나쁜 경우 텍스트할 수 있습니다.

  3. :는 경우 std::uncaught_exception false 를 반환합니다,당신은 예외 흐름다.는 경우 true 를 반환한 다음 다시 로깅 접근 방식이다.

그러나 그것은 좋은 위에 던져 d'tors?

동의함으로 대부분의 위 던지는 것은 최고의 피자가 될 수 있습니다.그러나 때때로 당신은 당신이 최고 그것을 받아들이 일어날 수 있고,그것을 처리습니다.나는 3 을 선택합니다.

거기에 몇 가지 이상한 경우에는 그 실제로 훌륭한 아이디어 을 던져서 소멸자.다음과 같이"확인"오류 코드입니다.이 값은 유형에서 반환된 기능이다.신되는 경우 읽기/검사 포함된 오류 코드가 반환되는 값멸됩니다., 면 오류 코드를 반환되지 않으로 읽는 시간의 반환 값의 범위,그것은 던져 몇 가지 예외가 에서 소멸자.

현재는 정책을 따릅니(그렇게 많은 말을하는)클래스지 않을 적극적으로 던지는 예외에서 자신의 소멸자만 제공하는 대신 공"닫기"방법을 수행하는 작업이 실패할 수 있습니다...

...믿어요 하지만 소멸자에 대한 컨테이너 클래스 형식과 같은 벡터,하지 않아야 마스크에서 발생한 예외를 클래스가 포함됩니다.이 경우에는,내가 실제로 사용하는"무료로/근접"는 방법을 반복적으로 자동 호출.그렇다,나는 말을 재귀적으로.가하는 방법이었습니다.예외 전파에 의존하고 있는 스택:단일 경우 예외가 발생한 다음 모두 남은 소멸자 아직도 실행하고 보류 중인 예외가 전파되면 일상적인을 반환합니다.여러 예외가 발생하는 경우,다음(에 따라 컴파일러)중 하나는 첫 번째 예외로 전파됩니다 또는 프로그램을 종료됩니다.그렇다면 많은 예외가 발생하는 재귀 오버플로우의 스택이 다음 뭔가를 심각하게 잘못된 사람들에 관하여 알아내기 위하여 려고 하고,그것도 괜찮습니다.개인적으로,그의 측면에 잘못 오류를 초당 미터까지 보다는 오히려 숨겨진 비밀,그리 교.

점은 컨테이너에 남아 있고,그것은 포함되는 클래스지 여부를 결정하는 행동 또는 무례한 행동과 관련하여 던지는 예외에서 자신의 소멸자입니다.

마틴 Ba(위)에 당신이 건축가 다르게 출시하고 COMMIT 논리입니다.

릴리스:

당신이 먹어야 어떤 오류가 있습니다.당신은 메모리를 해제하고,연결을 닫,etc.아무도 다른 시스템에서 이제까지 볼 것들의 다시,당신은 돌려주고 자원을 수 있습니다.만약 그것이 필요할 것 같아요 실제로 오류 처리기,그 가능성과 디자인의 결함에 객체 모델이다.

에 대한 Commit:

이것은 당신이 원하는 곳에서 동일한 종류의 RAII 래퍼는 개체는 일을 좋아하는 std::lock_guard 제공한 뮤텍스.그와 당신은이 두지 마십시오 commit 논리에 dtor 다.전용 API,그것을 위해 다음 래퍼는 개체 RAII commit 에서 자신의 dtors 및 처리의 오차가 생기는 경우가 있습니다.당신을 기억을 잡을 수 있는 예외에서 소멸자가 잘;발행 그들에게는 치명적이다.또한 이를 구현할 수 있습책과 다른 오류 처리하여 건물 다른 래퍼(예:std::unique_lock 대std::lock_guard),그리고지 않습니다 보장을 호출하는 것을 잊지 commit 논리는 반 방법으로 괜찮은 정당성이 어떤 환경에서 살아 남기 위해 필요한에 dtor 에서 1 위.

설정 알람 이벤트입니다.일반적으로 알람 이벤트가 더 나은 양식을 알리는 오류하는 동안 청소하는 개체

달리 생성자를 던지는 예외가 될 수 있는 유용한 방법을 나타내는 객체를 작성,성공 예외를 던지에서 소멸자입니다.

은 문제가 발생하면 예외가 발생하면 소멸자에서 동안 스택 해제 과정입니다.만약 그렇다면,컴파일러를 넣는 상황에서 그것을 알지 못할지 여부를 계속택 해제 프로세스 또는 처리하는 새로운 예외는 아니다.최종 결과는 당신의 프로그램으로 즉시 종료됩니다.

따라서 최고의 코스의 행동은 단지 사용을 절제하는 것을 예외에서 소멸자니다.메시지를 작성하는 로그 파일을 대신 합니다.

그래서 제 질문은 이 경우 던지기에서 소멸자에서 결과 정의되지 않은 행동을 어떻게 처리하는 오류를 중에 발생할 소멸?

주요 문제는 이것:할 수 없습니다 실패가 실패.그것은 무엇을 의미하는 실패가 실패 후,모든?는 경우에 트랜잭션을 데이터베이스에 오류가 발생하면,그것은 실패가 실패(패 rollback),무슨 일을 무결성 데이터의 우?

이후로 소멸자가 호출되는 모두 정상적이고 뛰어난(fail)경로,그들은 자신이 실패할 수 없거나 다른 우리는"실패가 실패".

이것은 개념적으로 어려운 문제이지만 종종 솔루션을 찾을 수 있는 방법을 확인하는 실패에 실패할 수 없습니다.예를 들어,데이터베이스를 작성할 수 있는 변경 사항은 이전에 투입해 외부 데이터 구조 또는 파일입니다.트랜잭션이 실패하면,그 파일/데이터 구조에 던질 수 있습니다.모든 확인은 투입부터 변경되는 외부 구조/파일 원자 트랜잭션이 실패할 수 없는.

는 실용적인 해결책은 아마도 그냥 있는지 확인 가능성 실패에 오류가 천문학적으로 황당한 이후 만들기 실패하는 것은 불가능하다가 실패할 수 있는 거의 불가능할 경우가 있습니다.

가장 적절한 해결책이 나에게 작성하는 것이 아닌 정리에서 논리도록하는 방식으로 정리한 논리할 수 있는 말이 있습니다.예를 들어,당신을 유혹하는 새로 만들고 데이터 구조를 정리하기 위해 기존 데이터 구조,그리고 아마도 당신은 수 있습을 만들려고 노력하는 보조 구조도록 사전에 우리는 더 이상을 만들 수 있고 그 안에 소멸자.

이 모든 것은 훨씬 더 쉽다는 말,틀림없이지만,그것만이 정말로 적당한 방법으로 나는 그것에 대해 이동.때로는 생각이 있어야 하는 능력을 쓰고 별도의 소멸에 대한 논리를 정상적으로 실행한 경로에서 탁월한 사람 때문에 때때로 소멸자는 느낌과 같은 조금 그들은 더블 책임려고 노력하여 처리(예를 들은 범위의 경비를 필요로 하는 명시적 해고;그들이 필요 하지 않을 것이면 그들은 차별화할 수 있는 뛰어난 파괴 경로에서 탁월한 사람).

아직도 궁극적인 문제는 우리가 실패할 수 없는 실패하고,그것의 하드는 개념적인 디자인 문제 해결을 위해 완벽하는 경우도 있습니다.그것은 쉽게 얻을 얻지 않는 경우에 당신은 너무에 싸여한 복잡한 제어 구조의 톤으로 조그마한 상호 작용하는 개체를 각각 기타,대신 모델링 디자인에 약간 부피 패션(예를 들어:입자 시스템과 함께 소멸자를 파괴하는 전체 시스템 입자,별도의 소멸자가 당 입자).할 때 모델을 디자인에 이런 종류의 낮은 수준에,당신은 아닌 사소한 소멸자 처리할 수 있도 종종 여유가 무엇이든 메모리/한 오버헤드를 처리가 필요한지 확인하는 소멸자 실패할 수 없습니다.

그 중 하나는 가장 쉬운 솔루션을 자연스럽게 사용하는 소멸자하는 횟수가 줄어듭니다.에서는 입자가 위의 예에서,아마도시을 파괴하거나 제거하는 입자,일부 이루어져야 하는 것이 실패할 수 있습니다.는 경우,대신 호출하여 이러한 논리를 통해 입자의 dtor 될 수 있는 실행에 뛰어난 경로,당신은 수 있는 대신 모두에 의해 수행 입자할 때 시스템 제거 입자.을 제거하는 입자 수는 항상 수행하는 동안 비 탁월한 경로에 있습니다.는 경우 이 시스템은 파괴되고,어쩌면 그것은 단지를 제거하는 모든 입자와 귀찮게 하지 않으로는 개별적인 입자를 제거 논리 실패 할 수 있습니다 동안,논리는 실패 할 수 있습니다만 실행되는 동안 입자 시스템의 정상적으로 실행할 때 그것은 하나 이상 제거 입자입니다.

거기에는 종종 솔루션을 좋아하는 작업하는 경우를 피하기 위해 많은 조그마한 객체와 함께 아닌 사소한 소멸자입니다.어디에 당신을 얻을 수 있습에 얽힌 엉망이 어디 그것은 보인다 거의 불가능하다는 예외 안전을 할 때에 얽힌의 많은 조그마한 객체는 모두가 아닌 사소한 dtors.

그것은 많은 도움이 될 것이라면 nothrow/noexcept 실제로 번역되는 경우 컴파일러 오류 아무것도 지정하는 그것을 포함하여(가상 함수해야 하는 상속 noexcept 사양의 기본 클래스)를 시도 호출할 수 있는 것이다.이 방법으로 우리를 잡을 수 있습니다 이 모든 물건을 컴파일시면 우리는 실제로 쓰는 소멸자가 실수로는할 수 있습니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top