728x90

언어/C++ 34

4. 복사 생성자 & 임시객체

복사 생성자 객체의 복사본을 생성할때 호출되는 생성자 복사될 원본에 const를 붙여서 원본이 손상되는 일 방지 깊은 복사 , 얕은 복사 깊은 복사 - 복사에 의해 두개의 값 생성 얕은 복사 - 대상의 값은 하나 접근 포인터만 2개 얕은 복사의 경우 이미 삭제된 메모리를 한번 더 삭제하려 하면 오류 발생 대입 연산자 단순 대입 → 얕은 복사 실행 대입 연산자 다중정의로 깊은 복사 수행하도록 작성 변환 생성자 explicit 예약어로 차단 가능 이름없는 임시 객체 객체를 return 하는 경우 임시 객체가 복사생성자로 생겼다 사라짐 r-value 참조 연산에 따라 생성된 임시객체 기본 자료형 말고, 클래스에 적용될 때 필요 이동 시맨틱 이동 생성자 + 이동 대입 연산자

언어/C++ 2023.01.17

3. 클래스

객체 지향 프로그래밍 클래스 기본 문법 생성자 / 소멸자 생성자는 다중정의 가능 소멸자는 불가능 만들어놓지 않더라도 컴파일러가 디폴트 생성자, 소멸자를 만들어 놓음 접근 제어 지시자 클래스 - 기본 Private 구조체 - 기본 Public 전역변수로 선언한 클래스의 생성자는 main보다 먼저 호출 동적 객체의 생성과 소멸 new[]로 생성한 것은 delete[]로 삭제해야 한다 ( 안할시 메모리 릭 ) 참조 형식 멤버 초기화 참조자는 선언과 동시에 초기화 해야한다. 그래서 생성자 초기화 목록을 써야한다. 생성자 다중 정의 C++11 부터 생성자 위임 가능 생성자 위임 - 생성자 초기화 목록에서 다른 생성자 추가로 호출 같은일을 하는 코드가 여러번 있을 필요 X 명시적 디폴트 생성자 선언과 정의를 한번에..

언어/C++ 2023.01.16

2. C++ 함수와 네임스페이스

디폴트 매개변수 호출자만 보고 함수 원형 추측 불가 반드시 오른쪽 매개변수부터 기술 함수 다중정의 오버로딩( 함수의 매개변수가 달라지는 등 ) 다형성을 제공한다. 함수 템플릿 오버로딩 VS 함수 템플릿 오버로딩 - 유지보수 측면에서 문제. 불필요한 코드 작성시 메모리 낭비. 함수 템플릿 - 컴파일러가 생성. 컴파일 시간 UP 인라인 함수 함수 호출로 인한 오버헤드 극복 오버헤드 - 스택메모리 UP ,매개변수 때문에 메모리 복사 최적화 옵션을 켜두면 컴파일러가 알아서 결정해준다. 네임스페이스 협업중, 다른 개발자와 변수명이 겹치는 문제 해결 using 선언 자주 사용하는 네임스페이스 생략 네임 스페이스 중첩 네임 스페이스 안에 또 다른 네임스페이스 속할 수 있다. A::B::C 와 A::D 이런식으로 구별..

언어/C++ 2023.01.16

1. C와 C++ 차이

C++ 객체지향 프로그래밍 C++에서는 사용자 정의 헤더가 아닌, 표준 헤더들은 .h 생략 _tmain은 유니코드를 지원하기 위해 재선언 됨 인스턴스 변수와 같은 의미 ex) int a → int 자료형에 대한 인스턴스 a 자료형 C와 기본적으로 같다 auto, decltype(expr) 추가 auto 초기값 형식에 맞추어 선언하는 인스턴스 형식이 자동으로 결정 범위 기반 for문에서 활용 컴파일 시점에 항을 보고 변수의 타입을 결정. 그래서 초기화가 의무적이다. 메모리 동적 할당 new와 malloc 차이(메모리 크기 지정 안해도 됨) new[]로 생성한건 delete[]로 삭제 (동적 할당 객체와 객체의 배열은 구조가 다르기 때문에 메모리누수(Memory Leak)가 발생할 수 있다 참조자 형식 포인..

언어/C++ 2023.01.16
728x90