오늘은 초기화리스트(Initialize List)에 대해서 알아보겠다. 일단 초기화 리스트 란 클래스의 각 멤버를 생성자에서 초기화 할 때 생성자 뒤에 콜론연산자(:)를 사용해서 객체의 멤버를 초기화 할 수 있다. 이를 초기화 리스트, 또는 콜론 초기화라고 한다. 글로써 이해가 안간다면 그림으로 이해해보자. 다음과 같은 부분에서 : i( j )부분이 바로 초기화 리스트이다. (나도 이번 포스팅자료를 찾으면서 이 방법이 초기화 리스트라고 부른다는것을 알았다;;) 그렇다면 이 초기화 리스트를 왜 써야 하는걸까? 일반적으로 임의의 클래스가 멤버로 다른 객체를 가진다면 초기화 리스트를 사용하지 않은 것보다는 초기화 리스트를 사용한 초기화 방법이 좋다고 한다. 그 이유는 함수 호출의 횟수의 차이가 있다. 초기화리..
오늘 알아볼 내용은 const int* 와 int* const의 차이점입니다. 다음과 같이 있을때 pi1의 경우 const가 int* 이고 변수 pi1이 가리키는 대상은 수정할수 있습니다. 하지만 pi1의 실제값을 수정할수는 없습니다. 반면 int* const의 경우 const가 변수고 pi2의 실제값을 수정할수는 있지만 변수가 가리키는 대상을 수정할수는 없습니다. 의외로 헷갈리는 부분이기 때문에 한번 쓰윽~ 읽어보시고 이해하시면 되겠습니다. 누군가에게는 작은도움이 되었기를 바라면서 오늘의 포스팅 끝~
이번에는 Define에 대해서 알아보겠다~ 이러한 유형문제가 이번에 모 게임회사 필기테스트에도 나왔었다! Define은 참 좋은 매크로이지만 잘못 사용하면 예상치 못한 결과가 나올수도 있다. 다음과 같은 코드가 있을때 결과값은 어떨까? 그냥 단순하게 생각해보면 5,06,07,0 일꺼 같다. 하지만 결과를 보면 다음과 같다. 매크로로 정의된 GET_MAX(X,Y)를 풀어보면 첫번째 GET_MAX(X,Y) 실행시에는 (++x) > (y) ? ++x : y 과 같다 따라서 ++x 이 두번 호출된다. 그렇다면 왜 두번째 실행시에는 ++x가 1만 증가 할까? (++x) > (y+10) ? ++x : y+10 이유는 삼항연산자중에 false 케이스가 호출하기 때문에 ++x는 한번만 호출된다. Define이 좋은 방..
이번에는 소멸자에 Virtual을 사용해야 하는 이유에 대해서 알아보겠다. 다음과 같은 코드가 있을때 동적으로 자식클래스(B) 생성후, 부모클래스(A)타입으로 받은후 삭제를 한다면 어떻게 될까? 결과는 다음과 같이 데이터타입인 A클래스의 소멸자만 호출되었다. B클래스의 소멸자가 호출되지 않기때문에 이렇게 한다면 메모리 누수가 생기고 언젠간 프로그램이 죽어버린다; 그래서 제대로된 메모리해제를 하려면 소멸자에 virtual을 사용해야 한다. virtual을 사용하니 다음과 같이 의도한대로 B가 메모리 해제를 하면서 소멸자가 호출되었다. 잊어버리지 말자~ 누군가에게는 작은도움이 되었기를 바라면서 오늘의 포스팅 끝~
요즘 여기저기 프로그램 테스트본다고 다니느라 포스팅을 못했다. 더 밀리기 전에 오랜만에 포스팅을 해봐야겠다. Virtual 키워드에 대한 개념은 이미 알고 있을것이라고 생각해서 따로 정리하지는 않겠다. 다음 문제는 모 게임회사의 코딩테스트 문제중 일부였다. 다음과 같은 코드가 있을때 출력되는 결과와 이유를 적으라고 한다 출력결과는 예상대로 BB였다. Virtual 키워드를 사용한 함수는 호출될때 실제 메모리에 할당된 클래스(B)에 정의되어 있는 함수를 1순위로 호출된다. 그래서 부모타입(A)으로 사용하여도 자식 클래스에서 정의되어 있다면 실제메모리에 할당된 클래스(B)에 맞는 함수가 호출된다. 그렇다면 A클래스 함수의 virtual이 없다면 출력결과는 어떻게 될까? 출력결과는 AB이다. 잊어 먹지 말자~..
요즘 서류지원을 하고 Pre-Test를 공부하느라 포스팅이 뜸했습니다a 그래도 공부하던중 몰랐던 재미있는 방법들이 있어서 정리하고 있는 중입니다. 다른 내용들도 시간내서 하나씩 정리해 올리겠습니다~ 오늘의 내용은 XOR를 이용한 정수값 Swap 입니다! 우선 혹시나 XOR 연산이 어떤 원리인지 기억이 가물가물하신 분들을 위해 정리해봤습니다. 다음과 같이 x나 y중 하나만 1일때 값이 1이고 나머지는 0으로 바꿔주는 Bit연산입니다. 그렇다면 이것을 이용해서 어떻게 두 정수값을 Swap할수 있을까요? 기존에 방법으로 하자면 이렇게 temp 변수를 이용해서 Swap을 하셨을겁니다. 여기서 설명할 방법은 다음과 같습니다. 다음과 같이 XOR 연산을 3번함으로써 두값을 Swap 할수 있었습니다. 다음은 결과화면..
이펙티브 STL 서적을 읽고 있던중 auto_ptr 컨테이너(COAP: Container Of A(a)uto_P(p)tr)는 절대 금지라고 강조하는 부분이있었습니다. 책의 저자는 COAP를 만드는 코드는 컴파일조차되어서는 안된다고 강조합니다. -_-! 그 결정적인 이유는 COAP는 이식이 불가능하다는 점입니다. 이 점을 풀어서 설명드리자면 auto_ptr 하나를 복사(copy)하면, auto_ptr이 가리키는 객체의 소유권(ownership)은 복사하는 (copying) auto_ptr로 옮겨지고 복사되는 (copied) auto_ptr는 NULL로 셋팅된다는 것입니다. 즉 auto_ptr을 복사하는 것은 '그 포인터의 값을 바꾸는 것이다.' 라고 말할 수 있겠습니다. 이렇게 이식이 불가능한 상황인데 S..
다중 쓰레드 환경에서 작업하다보면 쓰레드동기화 때문에 골치아픈경우가 매우 많다. 예를 들면 두 쓰레드가 공통객체를 같이 쓰게되는 경우이다. 테스트했었던 동기화처리가 되지않은 코드이다. #include #include "CThread.h" #include int money; class ThreadTest : public CThread {private: int num;public: ThreadTest () { num = 0; } ThreadTest (int num){ this->num = num;} virtual int run () { //CThreadSync sync; if(money >= 1000) { printf("[%d] 돈이 1000원 이상 있음 \n",num); for(int idx=0; idx..
쓰레드를 이용할일이 있어서 pthread로 쓰레드를 만들어봤다. 윈도우즈에서 pthread를 사용하는 방법은 이전 포스트에써 놨다.(http://idea-sketch.tistory.com/4) pthread를 어떻게 쓰실지 잘 모르겠다는 분들은 여기를 참조하세요. http://www.joinc.co.kr/modules/moniwiki/wiki.php/Site/Thread/Beginning/PthreadApiReference 혹시나 필요하신 분들은 가져다 본이의 입맛에 맞게 고쳐쓰시면 되겠다. 준비물은 pthread.h이다. CThread.h #include class CThread{protected: pthread_t mThread; bool threadRunFlag;public: CThread ();..
Windows 환경에서 쓰레드를 이용할 일이 생겼다. 무의식적으로 익숙한 #include 를 사용했는데 pthread.h가 없다고 나온다a 그래도 난 pthread를 사용하고 싶었고!! 구글링을 해보니 방법이 있었다!! 다행이 친절하게 설명해주신분의 블로그가 있어서 쉽게 해결했다. 참고한 사이트는 여기다 http://plming.tistory.com/62 링크에 나온 설명방법을 그대로 따라해봤다. 우선 http://www.sourceware.org/pthreads-win32/ 로가서 lib,include,dll을 다운받는다. 1. 나는 가장 최신버전인 prebuilt-dll-2-9-1-release 를 받았다. 2. 그다음 빈프로젝트를 생성후 다운받은 파일을 옮겨 놓는다. 3. 프로젝트 속성에서 C/..
- Total
- Today
- Yesterday
- 갭 락
- mysql lock
- 메타프로그래밍
- Autoloading
- Elasticsearch Cluster
- MySQL 인덱스
- metaprogramming
- 루비 메타프로그래밍
- 루비 상수
- gap lock
- 엘라스틱서치 기초
- 인덱스
- 페어프로그래밍
- next key lock
- dead lock
- InnoDB
- MySQL 족보
- lock
- 되추적
- MySQL
- innoDB lock
- ruby meta programming
- db
- ruby
- Pair-programming
- 페어 프로그래밍
- 넥스트 키 락
- 트랜잭션
- autoload_paths
- 루비
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |