목록C++ (7)
물에 사는 벌레
정적 라이브러리 컴파일 과정중 하나인 링킹 과정에서 링커가 라이브러리를 실행 파일에 링크합니다. 실행 파일에 라이브러리의 코드가 복사되어 포함되기 때문에 실행 파일의 크기가 커지며 컴파일 시간이 길어질 수 있습니다. 컴파일이 끝난 후에는 lib 파일이 없더라도 프로그램 실행이 가능합니다. 동적 라이브러리(공유 라이브러리) 정적 라이브러리와는 다르게 런타임에서 필요에 따라 로더가 로드하여 사용합니다. 실행 파일에는 호출할 함수의 정보만 포함되기 때문에 실행 파일의 크기가 작아지며 컴파일 시간이 크게 증가하지 않습니다. 하지만 컴파일이 끝난 후에도 dll 파일이 존재해야만 프로그램 실행이 가능합니다. 동적 라이브러리는 프로세스 시작 단계에서 코드를 로드하는 암시적 링크, 프로세스 실행 중에 필요한 코드만 로..
#pragma once #include typedef char* new_char; // 바이트를 이진수로 표현한 문자열로 변환 new_char BytesToString(char* bytes, int size); // 바이트를 이진수로 표현하여 출력 void PrintBytes(char* bytes, int size); // 쉬프트 연산으로 바이트화 template new_char ToBytes(T var) { int size = sizeof(T); char* bytes = new char[size]; for (int i = 0; i > push) & (0xFF); } return bytes; ..
참고 유니크 포인터와 쉐어리드 포인터는 깊게 공부한 것이 아닌 대충 슥 보고 "이런 구조구나" 하고는 만드는 것인 점을 밝힙니다. 모든 기능을 다 만들지는 않습니다. 뜯어 보니 복잡해 보이는 게 많아서... template class UniquePointerClone { public: T* pointer; UniquePointerClone(T* object): pointer(object){} ~UniquePointerClone() { if(pointer != nullptr) delete pointer; } UniquePointerClone(const UniquePointerClone& other) = delete; UniquePointerClone& operator = (const UniquePointe..
int i = 1; 우측 값과 좌측 값을 쉽게 보자면 = 연산자의 오른쪽에 있는 값, 왼쪽에 있는 값을 부르는 말이다. 그런데 좌측 값은 좌측, 우측 어디에든 있을 수 있으며, 우측 값은 언제나 우측에만 있을 수 있다. 무슨 말이냐면, int i = 1; int j = i; 이런 말이다. 좌측값인 i는 두 번째 행에서 우측에 존재한다. 즉 좌측 값은 우측에 위치할 수 있다. 하지만 우측 값이 좌측에 위치하는 것은 불가능하다. int i = 1; 1 = int j; 1 = i; 2행 3행은 불가능하다. & 기호를 사용하는 레퍼런스 또한 좌측 값이기 때문에 모든 우측 값을 받을 수 있을 것 같으나 그렇지 않다. int& i = 1; 해당 구문은 에러 메시지를 출력한다. "내용은 비 const 참조에 대한 내..
delete 식별자는 일반적으로 할당한 메모리의 해제에만 이용되는 줄 알았으나, 함수 자체를 사용하지 못하게 하는 기능도 가지고 있었다. C++ 11 버전에 추가되었다고 한다. 사용 방법도 간단하다. #include using namespace std; class A { public: A() { cout
C#의 델리게이트를 활용한 콜백은 활용도가 높고 편리해서 굉장히 많이 사용했는데, C++에는 이러한 델리게이트를 지원하지 않는 듯하다. 그나마 있는 함수 포인터는 멤버 함수를 담기에는 제약이 많아 유연성이 떨어져 못 써먹겠어 검색해 보니 functional.h 에 정의되어 있는 function 타입을 bind함수를 통해 지정한 함수와 일대일 대응하게 할 수 있더라. 그러나 C#에 비하면 bind 함수의 사용 또한 매우 귀찮긴 하다. #include using namespace std; class Object { char name[100]; public: Object(const char* name) { strcpy_s(this->name, name); } int f2(int i, int j, int k) ..
* 주의! 더 쉬운 방법이 존재할 수 있으며, 글쓴이도 자기가 무슨 소리를 하는지 모르기 때문에 헛소리 같다 싶으면 걸러 들으셔도 됩니다. * 그냥 shared_ptr 쓰세요! 대략 간단하게 설명하면 힙에 동적으로 생성된 인스턴스의 참조가 끊어지면 그 녀석을 삭제하는 코드입니다. 우선 통짜 코드를 투척 후 대략 어떻게 구혔했는지 서술하겠습니다. 대충 이런 녀석이구나 하고 넘기시면 됩니다. // GarbageCollector.h #pragma once #include #include class GarbageCollecter { private: GarbageCollecter(){} GarbageCollecter(GarbageCollecter& other){} GarbageCollecter operator =..