수업/C++

10상속 - 생성자와 소멸자, 가시성지시어

MDanderson 2024. 11. 26. 23:46

1. 소멸자를 별도로 지정하지 않아도 되는 경우

컴파일러가 제공하는 기본 소멸자는 아래와 같은 조건에서 충분히 동작합니다:

기본 소멸자의 동작

  • 멤버 변수가 **기본 데이터 타입(예: int, double 등)**이거나 **표준 라이브러리 객체(예: std::string, std::vector 등)**인 경우.
  • 객체의 메모리를 자동으로 관리할 수 있는 경우.

예제: 소멸자를 별도로 지정하지 않아도 되는 상황

 

  • int와 std::string은 기본 소멸자가 알아서 정리합니다.
  • 동적 메모리를 사용하지 않으므로, 특별한 소멸자 정의가 필요 없습니다.

2. 소멸자를 반드시 지정해야 하는 경우

사용자가 동적 메모리 관리 또는 리소스 관리를 직접 수행해야 하는 경우에는 반드시 소멸자를 정의해야 합니다.

소멸자를 꼭 정의해야 하는 상황

  1. 동적 메모리 할당(new/delete):
    • 클래스가 new로 동적 메모리를 할당받는다면, 소멸자에서 반드시 delete로 해제해야 메모리 누수를 방지할 수 있습니다.
  2. 파일, 네트워크, 데이터베이스 연결 등 외부 리소스 관리:
    • 파일 핸들러를 닫거나, 네트워크 연결을 종료하거나, 데이터베이스 연결을 정리하는 경우.
  3. 자체적으로 관리해야 하는 포인터:
    • 클래스가 원시 포인터를 멤버로 포함하고 있다면, 소멸자에서 적절히 정리해야 합니다.

예제: 동적 메모리를 사용하는 경우

  • 여기서 data는 new로 동적 메모리를 할당받았기 때문에, 소멸자에서 delete[]를 사용해 반드시 해제해야 합니다.
  • 소멸자를 작성하지 않으면 **메모리 누수(memory leak)**가 발생합니다.

Person클래스의 생성자를 호출하는방법이 없기때문에 자식클래스에서 n의 값을 지정할때 생성자를 호출해야함

 

 


상속시 액세스지어

 

 

class Dog : private Animal{ } 이면 private 생략가능

 

 

 

 

b는 파생클래스 내부에서는 자유롭게사용할수있지만 int main() 에서는 외부라서 사용못함

 


final로 선언된 클래스

 

이름은폐

 

 : : 라는 표시가있으면 전역에서 찾으라는말