cs

    [C++] enum vs #define

    enum 열거형 상수 자동으로 index 매겨짐 .h 등의 전역에 선언해두면 #define과 마찬가지로 모든 파일에 적용 But, 클래스 내부에 선언해두면, 그 클래스 내부에서만 사용 가능한 상수로 사용 가능 // IH.h class IH { public: enum FEATURE { MEAN, // 0 VARIANCE, // 1 ... } } // main.cpp cout

    [C++] 가비지(Garbage) & 가비지 컬렉션(Garbage Collection) / 포인터 & 메모리 동적할당

    가비지 & 가비지 컬렉션 가비지 : 포인터(p1)에 다른 포인터(p2)에 담긴 주소값을 옮겨 담아서 p1이 다른 곳을 가리키면, 원래 가리키던 메모리는 아무도 사용하지 않고 아무도 가리킬 수 없는 상태가 되는데, 이때 이 아무도 사용하지 않는 쓰레기 메모리가 가비지! 가비지 컬렉션 : 시스템 상에서 가비지 컬렉터가 이 가비지를 찾아 자동으로 다시 사용 가능한 자원으로 회수하는 것 (수동으로 직접 해제해주지 않아도 됨) cf. 댕글링 포인터 : 이미 동적 할당된 메모리를 해제했는데 여전히 가리키고 있는 포인터. p1과 p2가 한 메모리를 동시에 가리키고 있다가 그 중 한 포인터에 의해 메모리를 해제한 경우! ex. 블록 밖으로 나가면서 Mat이 자동으로 해제됐는데 포인터는 그대로 가리킬 때 포인터 대입 (..

    [C++] 전방 선언 (Forward Declaration)

    A 클래스가 a.h라는 헤더파일에 있고, B 클래스가 b.h라는 헤더파일에 있는데 A에서도 B를 사용하고, B에서도 A를 사용할 때.. 서로 #include를 둘 다 해서 헤더 꼬임 현상이 발생하면 무한 루프에 빠지게 되는데, (컴파일 속도도 저하됨) 이 때 전방 선언 사용! 전방 선언 사용법 한 파일(ex. "b.h")에서 #include "a.h" 대신, class A; 라고 선언! cf. 참고 [c++] 클래스 전방 선언(Forward declarations)와 상호 참조 헤더 파일 class A 가 a.h에 있고 class B 가 b.h 에 있는데 B가 A를 사용하고 A가 B를 사용할 경우 : 거의 설계가 잘 못되었다고 볼 수 있다. 이렇게 프로그램을 짜면 이해하기가 힘들고 추적이 힘들기 때문에 ..

    [C++] 정적 변수(Static) vs 전역 변수(Global) , const

    공통점 (지역 변수와 달리) 프로그램이 끝날 때까지 할당된 변수의 값과 메모리가 유지됨. 차이점 정적 변수 (Static Variable) 선언된 해당 파일, 함수 내에서만 접근 가능 ==> 내부 링크 초기화는 단 한번만 가능 (소스 파일에서만 초기화 가능) 선언 시 : static 키워드를 반드시 사용해야 함 전역 변수 (Global Variable) 해당 프로그램의 모든 파일, 함수에서도 접근 가능 ==> 외부 링크 필요할 때마다 초기화를 언제든 몇번이든 가능 다른 파일에서 접근하지 않는 전역 변수 선언시에는 그냥 main 함수 바깥에 선언해주면 됨 다른 파일에서 접근하려면 extern 키워드로 변수를 선언해야 함 // 전역 변수 사용 ex (외부 링크 시) int g_value; // 본문 내 선언..

    [C++] 포인터, 주소연산자(&), 배열, 동적할당, 자료형 + vs 참조형 변수(&)

    &도 /처럼 연산자! 타입(자료형) 에 따라서 연산 결과가 다르다 즉, 일반 배열과 동적할당한 배열의 자료형이 다르므로, 같은 배열이어도 &연산 결과는 다름! int myarr[10]; // type : int [] int *newarr = new int[10]; // type : int * arr vs &arr 가리키고 있는 것(개념) 은 다른데, 출력 값은 같다 if 동적할당 X 배열 => arr == &arr arr : 배열의 첫번째 요소(arr[0])를 가리키고 있는 포인터 &arr : 전체 배열 자체의 포인터 따라서 arr+1 과 &arr+1 의 값은 다르다! 배열과 배열 주소의 관계 https://hashcode.co.kr/questions/936/%EB%B0%B0%EC%97%B4-%EC%9D..