Computer/C++

    [C++] 함수 포인터 헷갈리는 부분에 대하여

    봐도 봐도 헷갈리는 함수 포인터.... 자료구조를 공부하다가 다음과 같은 코드를 보고 대혼란이 왔다. typedef int (*PriotityComp)(HData d1, HData d2); typedef struct _heap { PriotityComp* comp; //생략 }Heap; void HeapInit(Heap* ph, PriotityComp pc) { //생략 ph->comp = pc; //???? } 아니 대체..... 라인12가 왜 컴파일이 되는 것인가... 내가 알고 있던 함수 포인터는 무엇이었는가... 난 이렇게 살아왔는데...(?) 상태가 되어버림 분명 comp는 PriotityComp* 형이고 pc는 PriotityComp형인데 왜 이런 연산이 가능한 것이지??? 싶어서 별 시도를 ..

    [C++] 예외 처리(1) - 예외 메커니즘과 스택 풀기

    안녕하세요, katte입니다. 이번 글에서는 예외의 기본적인 메커니즘에 대해 알아보도록 하겠습니다. 예외 처리는 예외를 발생시키는(던지는) throw, 특별한 예외가 발생할 수 있는 throw 블록, 뒤이어 나오는 한 개 이상의 catch 블록으로 이루어져 있습니다. 또한 발생되는 예외는 클래스형이 일반적입니다. 예외가 발생되면 함수는 종료되며, try catch 블록이 있는 함수를 만날 때까지 호출된 함수들의 연쇄를 거슬러 올라가게 됩니다. 이를 스택 풀기라고 합니다. 프로그램은 함수를 호출할 때, 스택을 사용합니다. 다른 함수를 호출한(calling) 함수 구문의 주소를 스택에 올리고, 호출된(called) 함수를 실행합니다. 이때 호출된 함수의 매개변수 리스트와 local 변수 역시 스택에 추가됩니..

    [C++] 템플릿 클래스만 쓰면 링크 에러가 나는 이유가 뭘까

    해결책은 간단 걍 헤더파일에 함수 정의까지 집어넣으면 됨

    [C++] 스마트 포인터 클래스

    안녕하세요, katte입니다. 이번 글에서는 스마트 포인터 클래스, auto_ptr, unique_ptr, shared_ptr에 대해서 정리하도록 하겠습니다. 포인터는 C와 C++의 강력한 도구이면서 동시에 고질적인 문제가 됩니다. 특히 동적 할당된 메모리를 참조하는 포인터는 메모리 누수의 문제를 떠안고 있죠. 이를 해결하기 위한 것이 스마트 포인터 클래스입니다. 스마트 포인터는 객체가 scope를 벗어나 소멸하게 될 때, 소멸자를 호출하는 것을 이용합니다. 스마트 포인터 클래스에는 힙에 할당된 주소를 저장할 포인터 멤버가 존재하고, 클래스의 객체가 소멸할 때 소멸자를 통해 delete를 호출하여 메모리를 해제합니다. 스마트 포인터에는 auto_ptr, unique_ptr, shared_ptr이 있으며,..

    [C++] value categories

    https://en.cppreference.com/w/cpp/language/value_category Value categories - cppreference.com Each C++ expression (an operator with its operands, a literal, a variable name, etc.) is characterized by two independent properties: a type and a value category. Each expression has some non-reference type, and each expression belongs to exactly one of th en.cppreference.com C++의 value는 크게 glvalue와 rva..

    [C++] rvalue 참조와 move semantics

    안녕하세요, katte입니다. 이번 글에서는 드디어 미루고 미루던 rvalue 참조와 move semantics에 대해 정리해보려고 합니다. 원래 나중에 하려고 계속 미루고 있었는데 이 내용을 알아야 이해할 수 있는 내용이 자꾸 나오길래 그냥 빨리 정리해버리기로 했습니다ㅎㅎ.. rvalue는 우측값, 즉 대입 연산에서 오른쪽에 오는 값으로, 주소를 얻어내기 위해 주소 연산자&를 사용할 수 없는 값을 의미합니다. 예를 들자면 리터럴 상수(C스타일 문자열은 포함X), 레퍼런스가 아닌 함수의 리턴값, x+y와 같은 expression이 있습니다. 반대로 lvalue는 주소를 얻어내기 위해 주소 연산자를 사용할 수 있는 값이며, 이름이 있는 대부분의 객체가 포함됩니다. 가장 흔하게는 변수가 있을 것입니다. 우리..

    [C++] 함수 포인터 정리

    안녕하세요, katte입니다. 이번 글에서는 함수 포인터와 함수 포인터 배열, 함수 포인터 배열의 포인터(...)에 대해 다뤄보겠습니다. 배열 포인터에 관해서는 아래의 글을 참고해주세요. https://katteniiki.tistory.com/19 [C++] 배열 포인터 정리 안녕하세요, katte입니다. 이번 글에서는 배열 포인터에 대해서 간단하게 정리해 보도록 하겠습니다. 배열 포인터는 비슷한 이름 탓에 포인터 배열과 혼동될 수 있지만, 전혀 다른 개념입니다. 포 katteniiki.tistory.com 포인터는 C나 C++의 문법을 보기 껄끄럽게 만드는 요소중 하나입니다. 특히 함수 포인터와 배열 포인터로 여러 차례 꼬인 경우 한눈에 자료형을 파악하기 힘들죠. 물론 이런 경우를 위해 auto라는 키..

    [C++] 배열 포인터 정리

    [C++] 배열 포인터 정리

    안녕하세요, katte입니다. 이번 글에서는 배열 포인터에 대해서 간단하게 정리해 보도록 하겠습니다. 배열 포인터는 비슷한 이름 탓에 포인터 배열과 혼동될 수 있지만, 전혀 다른 개념입니다. 포인터 배열은 말 그대로 배열 각각의 원소가 포인터형인 것을 의미합니다. 다음과 같이 선언하고 사용할 수 있습니다. int a = 2, b = 3, c = 4; int* arr[3] = { &a, &b, &c }; //arr 각각의 원소가 포인터 std::cout