먼저 클래스 자체를 삭제하기 전에 멤버의 소멸자가 호출되어야합니다. 파괴 명령은 일반적으로 역순으로 진행됩니다. 그러나 나는 특별한 경우에 이것을 두드렸다.소멸자 순서 변경
PortA
PortB
card
~card
~PortB
~PortA
하지만이 경우에 필요한 :
// PortA
class PortA
{
public:
PortA() { cout << " PortA\n"; }
~PortA() { cout << " ~PortA\n"; }
};
// PortB
class PortB
{
public:
PortB() { cout << " PortB\n"; }
~PortB() { cout << " ~PortB\n"; }
};
class Card
{
public:
Card() { cout << "card\n"; }
~Card() { cout << "~card\n"; }
PortA mPA;
PortB mPB;
};
생산하고 그
card
PortA
PortB
~PortB
~PortA
~card
Closse 먼저 포트를 카드 자체 전에. 기본 클래스를 추가
이렇게 순서대로 멤버가있는 컨테이너 클래스를 만듭니다. – BoBTFish
예를 들어 스마트 포인터를 사용할 수 있습니다. 'std :: unique_ptr <>'그리고'Card' 생성자 안에'PortA'와'PortB'를 수동으로 만들고 소멸자에서'.reset()'을 사용하여 자유롭게합니다. – user2807083
두 가지 질문. 첫째, 건설 질서와 다른 파괴 질서에 의지하는 이유는 무엇입니까? 둘째,'PortA'가 구축 된 후에'PortB'의 구축이 실패한 경우 (예를 들어 예외가 발생했을 때)'PortA'가 파괴 될 것으로 예상합니까? – Peter