목록C++/문법 및 메소드(STL) (34)
나만의 작은 도서관

스마트 포인터 탄생의 배경: 기존 포인터의 두 가지 문제점 문제점 1: 메모리 누수가 발생하기 쉬운 환경C++은 GC(Garbage Collector)가 없다. 따라서 프로그램이 종료되지 않는 한 동적 할당된 메모리는 자동으로 해제되지 않는다. 💡 C++이 GC를 사용하지 않는 이유는 GC를 사용하면 프로그램의 속도가 느려지기 때문입니다. C++은 그 무엇보다 성능을 우선시하기 때문에 GC를 사용하는 대신 직접 메모리를 관리하는 방식을 택했습니다.만약 동적 할당한 메모리를 제대로 해제하지 않는다면 사용되지 않지만 자리를 차지하는 메모리, 즉, 가비지(Garbage)가 쌓이게 되고, 가비지가 쌓이게 되면 시스템에서 사용가능한 메모리 자원이 점점 줄어들게 되어 결국 메모리 부족으로 시스템은 크래시가 발생..

람다(Lambda) 표현식(C++11)// 기본 형태 : [캡처](매개변수들)->리턴값{함수내용};// 리턴값은 생략가능[](Item& item) {return item._rarity == Rarity::UNIQUE;};// 람다로 인해 만들어진 실행시점 객체 = 클로저(closure)auto isUniqueLambda = [](Item& item) {return item._rarity == Rarity::UNIQUE; }람다 표현식은 함수 객체(Functor)를 빠르게 만드는 문법으로, 반환값은 람다 표현식이 정의될 때 생성된 익명 클래스의 객체이다. (이하 람다 표현식을 “람다”라고 지칭)당연하게도 람다의 리턴값인 익명 함수 객체는 Callable 한 개체 중 하나이다.리턴값인 익명 함수 객체는 런타..
함수 객체(functor)란?class Functor {public: void operator()() { /* do something */ }}Functor functor;functor(); // = functor.operator() 함수 호출functor는 callable 한 개체 중 하나로, 호출 연산자 ()를 오버로딩하여 함수처럼 사용할 수 있는 객체를 의미한다.functor는 C++ 전반적으로 자주 활용되며, 대표적으로 STL에서 자주 활용되어 있다. functor 예제#include using namespace std;class Functor{public: void operator()() { cout Functor의 활용 예제1. 커맨드 패턴커맨드 패턴은 작업을 객체로 캡슐화하여 큐에..

함수 포인터란?리턴_타입 (*포인터_이름)(매개변수_타입) // exampleint (*ptr_fn)(int, int);int (*ptr_fn)(int (*)[3], int);함수 포인터란 callable 한 개체 중 하나로, 함수의 위치를 가리키는 포인터를 의미한다.함수를 변수처럼 포인터로 가리킬 수 있는 이유는 함수가 프로세스 메모리 구조 중 코드 영역(code segment)에 저장되어 있기 때문이다.함수 포인터는 C언어에서 넘어온 문법이다.함수는 정적 배열처럼 이름이 시작 주소값이 되므로, 함수 포인터에는 함수 이름을 대입한다. 함수 포인터 예제int max(int a, int b); // 함수 선언int (*ptr_max)(int, int); // 함수 포인터 선언ptr_max = max; /..

콜백 함수란?콜백 함수란 다른 함수의 매개변수로 전달되어 특정 시점에 실행되는 함수를 의미한다. 콜백 함수 예제아래 코드에서 CallableType은 호출 가능한 타입을 의미하며(뒤에서 설명), 실제로 존재하는 타입 식별자는 아니다.// 함수를 매개변수로 받는 함수void process(int a, int b, CallableType callback) { int sum = a + b; callback(sum); // 콜백 함수 호출}콜백 함수를 사용하는 이유콜백 함수는 “동작(함수)을 직접 실행하지 않고 넘겨준다”는 것이 핵심이다. 이렇게 동작을 함수에게 넘겨줬을 경우 아래와 같은 장점을 가지게 된다. 유연성과 코드 재사용성 (Flexibility & Code Reusability)상황에 따..
전방 선언(Forward Declaration)이란?class MyClass;"전방 선언(Forward Declaration)"은 식별자를 정의하기 전에 식별자의 존재를 컴파일러에게 미리 알리는 것이다.전방 선언의 주 사용목적은 헤더 포함 의존성을 최소화하여 컴파일 속도를 향상하기 위함이다. (앞으로의 설명은 클래스 전방 선언을 기준으로 설명) 전방 선언 예시// Game.hclass Player; // 나중에 정의하겠다고 전방선언class Game{public: Game() {} ~Game() {}private: Player* _player; // 최상단 줄을 지우고 class Player* _player;와 같은 형태도 가능하다.}; 전방 선언이 가능한 경우와 불가능한 경우전방 선언은 컴파일러가 클..