728x90 전체 글77 [C++] 생성자, 소멸자 어떤 클래스의 생성자를 호출했을 때의 그 과정 및 메모리, 소멸자를 호출했을 때의 그 과정을 정리해보고자 한다.생성자의 종류기본 생성자 : 아무런 인자도 받지 않는 생성자로, 객체를 기본 상태로 초기화할 때 사용된다.매개변수 생성자 : 인자를 받아 멤버를 특정 값으로 초기화할 때 사용된다.복사 생성자 : 이미 존재하는 객체를 복사해서 새로운 객체를 만들 때 사용된다.(인자로 객체를 받음) 이때, 복사는 얕은 복사가 일어난다.이동 생성자 : C++11 이후로 가능한 것으로, 복사 대신 이동을 수행하는 생성자이다. move semantics를 활용한 생성자로, 임시 객체의 자원을 복사하지 않고 이동시키기 때문에 성능이 더 좋다.위임 생성자 : 클래스 안에 생성자를 여러 개 두어, 각 상황마다 다른 생성자를 .. 2025. 10. 4. [C++] template(템플릿) template(템플릿)템플릿(template)은 자료형에 의존하지 않고 재사용 가능한 코드를 작성할 수 있게 해주는 일반화 프로그래밍(generic programming)을 가능하게 한다.컴파일 타임에 자료형을 매개변수처럼 받아들여, 컴파일러가 실제 자료형에 맞게 코드를 생성해주는 기능이다.즉, 함수나 클래스를 일반화된 형태로 정의해 두면, 컴파일 시점에 구체적인 타입으로 치환되어 코드가 생성된다.함수 템플릿(function template)자료형에 상관없이 동작하는 함수를 작성할 수 있다.template T add(T a, T b) { return a + b;}int main() { cout template 또는 template 로 선언(둘 다 동일하게 동작)실제 호출 시점에 T가 구체적인 타입으.. 2025. 10. 4. [C++] const (변수, 함수) C++에서의 const는 읽기 전용 제약을 걸어주는 타입 한정자이다.const 변수변수를 읽기 전용으로 만드는 것으로, 값을 바꾸는 등의 작업은 불가능하다.C#에서의 const와 달리, 컴파일 타임, 런타임에 값이 초기화되어도 상관없다.컴파일 타임에 초기화될 변수가 필요하다면, constexpr을 사용하면 된다.전역/정적(global 또는 static) 영역에서 선언한 const는 보통 읽기 전용 데이터 영역(.rodata)에 저장된다.지역 const 변수는 지역 변수와 동일하게 스택 영역에 저장된다.const 포인터const의 위치에 따라 의미가 달라진다.const int* p; // 포인터가 가리키는 값을 const로 (값 변경 불가) // 이 포인터로는 값을 수정할 수 없음 .. 2025. 10. 3. [C++] static (변수, 함수) static 변수전역/네임스페이스 스코프에서의 static 변수프로그램 시작 시 생성되어 데이터 영역(.data, .bss)에 저장되고, 프로그램 종료 시 소멸된다.해당 변수는 정의된 소스 파일 내에서만 접근이 가능하다.(다른 소스 파일에서 extern으로 접근 불가)선언 시 초기화하지 않으면 해당 타입의 기본값(0, false, nullptr 등)으로 초기화된다.함수 내부의 static 지역 변수전역 변수와 마찬가지로 데이터 영역에 위치하게 된다.함수 호출이 끝나도 값이 유지되어 사라지지 않는다. 일반 전역 static 변수와 같이 데이터 영역에 저장되며, 초기화는 함수가 호출될 때 최초 한 번만 수행된다.함수 외부에서는 접근이 불가능하다.클래스 내부의 static 멤버 변수전역 변수와 동일하게 데이터.. 2025. 10. 2. [C++] friend 키워드 friend 키워드란?C++에서 friend 키워드는 클래스나 함수가 다른 클래스의 private/protected 멤버에 접근할 수 있도록 허용하는 키워드이다.즉, 캡슐화로 인해 외부에서 접근할 수 없는 멤버에 대해, 특정 클래스나 함수를 friend로 지정해서 특별히 접근 권한을 부여하는 것이다.friend가 함수에 붙게 되면, 해당 클래스의 private/protected 멤버에 접근이 가능해진다.friend로 다른 클래스가 내부에 선언되면, 그 클래스의 모든 멤버 함수가 private/protected 멤버에 접근이 가능해진다.주의해야 할 점은 friend 관계는 상속되지 않으며, 양방향이 아니란 점이다.클래스 A 안에 클래스 B를 friend 클래스로 선언하고, 클래스 C가 클래스 A를 상속받았.. 2025. 10. 2. [C++] inline 키워드(inline 함수 및 inline 변수) inline 함수란?inline함수는 코드에 직접 삽입되어 호출 오버헤드를 줄일 수 있는 함수이다.반복 호출 시 함수 호출 스택 생성이 없다.(코드가 직접 삽입되므로 CPU 명령 실행 횟수가 절감됨)컴파일 단계에서 처리되며, 타입 검사를 통해 타입 안정성을 보장할 수 있다. 또, 오버로딩이 가능하다.#define과 같은 매크로 함수와 다르게 전역 치환되는 것이 아닌, 네임스페이스, 클래스 범위 등 C++ 스코프 적용이 가능하다.항상 치환되는 것이 아니라 컴파일러가 inline 함수와 같은 이름을 가진 함수가 호출됐을 때, 치환함으로써 얻는 이득이 클 때 치환을 결정한다.(함수의 크기가 너무 크거나 재귀 함수인 경우 등은 치환하지 않는다.)#define 매크로와는 뭐가 다른가?구분#define 매크로 함수.. 2025. 10. 1. 이전 1 2 3 4 ··· 13 다음 728x90