목록2026/04/13 (2)
Sonji-log
1. 이 항목이 왜 중요한가C++에서는 내가 직접 쓰지 않아도 컴파일러가 몇몇 함수를 자동으로 만들어 주는 경우가 있다. 대표적으로 아래 두 가지가 자주 문제를 만든다.복사 생성자(copy constructor)복사 대입 연산자(copy assignment operator)겉으로 보기에는 편리하다. 하지만 어떤 클래스는 "복사되면 안 되는 객체" 인데도, 아무 조치를 하지 않으면 복사가 가능해질 수 있다.예를 들어, 아래와 같은 경우를 생각해 보자.mutex 같은 동기화 객체파일 핸들, 소켓 핸들 같은 시스템 자원"오직 하나만 존재해야 하는" 객체(Singleton Pattern에 해당하는 성격의 객체를 생각하면 쉽다)내부적으로 복사 의미가 애매하거나 위험한 객체이런 객체를 실수로 복사하면 다음과 같은 ..
이 항목의 핵심은 간단하다.클래스의 생성/복사/대입/소멸 동작을 내가 명시하지 않으면 컴파일러가 "합리적이라고 판단한 기본 동작"을 넣어 준다.문제는 이 기본 동작이 "컴파일은 되지만 의도는 틀린 코드"를 만들 수 있다는 점이다. 특히 리소스 소유권(메모리, 파일, 소켓, 뮤텍스)을 다루는 클래스에서 위험하다.1. 컴파일러가 자동으로 만들 수 있는 함수C++ 클래스에서 특별히 선언하지 않으면 컴파일러가 다음 멤버 함수를 자동으로 선언할 수 있다.기본 생성자(default constructor)소멸자(destructor)복사 생성자(copy constructor)복사 대입 연산자(copy assignment operator)C++11 이후에는 이동 의미(move semantics)가 추가되어 아래도 상황에..
