명시적으로 정의하는 복사 생성자
C++에서의 복사 생성자는
명시적으로 정의할 수 있다.
명시적으로 정의하는 2가지 방식은
default로 만드는 것과
delete로 삭제하는 것이 있다.
복사 생성자를 삭제하면
더 이상 객체를 복제하지 않는다.
객체를 값으로 전달하는 것을 방지하기 위하여
이러한 삭제를 정의할 수 있다.
만약 클래스의 데이터가 복사 생성자가 삭제되었다면,
그 클래스의 복사 생성자도 자동으로 삭제된다.
초기화 리스트 생성자
초기화 리스트 생성자란,
std::initilalizer_list<T>를 첫 번째 매개변수로 받고,
다른 매개변수는 없거나 디폴트 값을 가진 매개변수를
추가로 받는 생성자를 말한다.
위임 생성자(delegating Constructor)
위임 생성자를 사용하면
같은 클래스의 생성자끼리 호출할 수 있다.
단, 생성자 본문 안에서
다른 생성자를 직접 호출할 수는 없다.
반드시 생성자 초기자에서 직접 호출해야 하며,
리스트 안에 멤버 초기자(initialValue)만 적어야한다.
위임 생성자의 코드는
대상 생성자가 리턴을 하고 난 뒤에 실행된다.
이 말이 뭐냐면
생성자 메소드 정의할 때
내가 아닌 같은 클래스 타입의 너의 생성자로 초기화 할 수 있는데
내가 먼저 생성자 일을 끝내고 너의 생성자를 부를 것이다.
라는 뜻이다.
이러한 위임 생성자를 사용할 때
생성자가 재귀적으로 호출되지 않도록 유의하자
내가 너한테 위임하고
너가 나한테 위임하는
순환 고리를 만들지 말자는 것이다.
C++ 표준에서는 이런 동작에 대해서
명확히 정해둔 것이 없기 때문에
컴파일러 마다 구체적인 처리 방식이 다르다.
변환 생성자
특정 클래스의 매개 변수로
double과 string 타입이 존재한다고 가정하였을 때
MyClasdType myClass;
myClass = 5.6;
myClass = "6";
이러한 코드가 허용됨은
암묵적 변환을 허용하기 때문이다.
이러한 암묵적 변환을 수행하는 것을 변환 생성자라 한다.
하지만 이처럼 암묵적 변환을 비허용할 때는,
double형과 string형 매개변수 대한 생성자에
explicit 키워드를 붙이면 된다.
그럼 직접 접근이 아니라면 허용하지 않는다.
즉 암시적 접근을 비허용하는 것이다.
explicit 키워드를 추가해도 변환 생성자임은
변함없다.
대입 연산자
이미 만들어진 변수에 대한 대입은 대입 연산자가 한다.
복사 생성자는 만들어질 때 값을 복사하는 생성자이고,
이미 선언된 변수에 값을 넣어줄 땐
대입 연산자를 사용한다.
대입 연산자는 크게 두 가지인
이동 대입 연산자와 복사 대입 연산자로 나뉜다.
이동 대입 연산자는
성능상의 이유로 대입 후 오른쪽 객체가 삭제되고,
복사 대입 연산자는
오른쪽 값과 왼쪽 값 대입 후 삭제하지 않는다.
'프로그래밍 언어 > C & C++ 정리' 카테고리의 다른 글
대입 연산자 (0) | 2025.03.04 |
---|---|
동적 메모리 다루기 (2) | 2025.02.04 |
그래서 다형성이 뭐라고요? (0) | 2025.01.12 |
인라인 함수 (15) | 2024.12.29 |
인터페이스를 사용하기 쉽게 설계하기 (2) (0) | 2024.12.05 |