일반적으로 다양한 형태의 포인터를 담기 위해 사용하는 방법 중에 주로 사용되는 방식은 두 방식입니다. 첫번째로 void *로 담는 방법과, 두번째로 상위 클래스를 두고 해당 클래스를 상속 받고, 상위 클래스 포인터로 관리하는 방법이 있죠. void*로 담는 방식의 단점은, 원본 포인터형이 아닌 다른 포인터형으로 캐스팅 하는 실수를 방지하기 어려운 문제가 있습니다. 상위 클래스 포인터로 다루는 방식은, 상속이 가능한 자료구조에만 사용 가능하다는 점과, 불필요한 상속을 유발하는 경우도 발생한다는 문제가 있습니다. 주로 포인터 변환은 콜백에서 많이 이루어지는데요, 제대로된 변환을 시도하느냐 그렇지 않느냐에 따라 변환 성공 여부를 반환해준다면 좋겠죠? 이에 대한 대안으로 AnyPtr이라는 것이 있습니다. 포인터..
class CObject { public: CObject(int nKey) : m_nKey(nKey) { } virtual ~CObject() { } DWORD Key() { return m_nKey; } private: int m_nKey; }; class CChild : public CObject { public: CChild(int nKey) : CObject(nKey) { memcpy(m_szData, 0, sizeof(m_szData)); } void Set(char* pData) { strncpy_s(m_szData, pData, sizeof(m_szData)); m_szData[DATA_SIZE - 1] = 0; } char* Data() { return m_szData; } private:..
WIN32 Console Application에서 MFC를 사용해야 하는 경우가 있습니다. 그냥 특정 클래스 기능만 사용하는게 아니고 다이얼로그나 윈도우 등을 사용하고 싶어지면, 참 난감해지죠? 제 경우에는 CppUnit을 사용하면서 필요했는데요, 어떻게하면 사용 가능해지는지 간단한 예제 보여드리겠습니다. 선언해두어야 할 전처리기입니다. #include //반드시 windows.h보다 먼저 선언되어 있어야 합니다. #include 그리고 프로그램 내에 삽입되어야 할 코드입니다. // initialize MFC and print and error on failure if (!AfxWinInit(::GetModuleHandle(NULL), NULL, ::GetCommandLine(), 0)) { // TOD..
Microsoft Specific dllimport, dllexport DLL에서(로) 함수, 데이터, 개체를 내보내는(가져오는) 속성. 함수를 dllexport로 선언하면, 적어도 export된 함수 스펙과 관련된 .DEF (모듈 정의) 파일이 필요없다. 또한 dllexport는 __export 키워드 (16비트 버전의 VC++에서 사용) 를 대체한다. declspec(dllexport) 클래스의 클래스 템플릿 특수화(specialization)는 암묵적으로 declspec(dllexport)가 된다. 즉 템플릿은 명시적으로 인스턴스화(==구체화)되고, 그 멤버들은 반드시 정의되어야 한다. dllexport C++ 함수는 이름장식을 가진 함수를 노출시킨다. C++ 이름장식이 필요없다면, .def 파일 ..
스택의 크기는 한정되어있다. 그럴 수 밖에 없는 것이, 스택 영역은 스레드 별로 다르게 존재해야 되기 때문이다. Visual Studio .net 2003 환경에서 기본 옵션으로 Build 했을 경우 stack 크기는 1M byte 이다. stack 크기를 늘리고 싶다면, 힙 공간을 사용하거나 project - properties - linker - system에서 stack reserve size를 변경하면 된다. 스택의 크기가 크게 배정된다면, 스택 오버플로우의 가능성은 낮지만 스레드 전환시 복사 비용이 크다는 단점이 생긴다. 스택에는 지역 변수, 함수가 되돌아갈 주소, 매개변수 등이 담기는데, 지역 변수를 남발 할 시에는 스택 크기를 넘어서서 스택 오브 플로우가 발생한다. 스택의 크기는 너무 커도 ..
상속 접근 지정자 부모 클래스의 접근 속성 자식 클래스의 접근속성 public (default) public public private 접근 불가 protected protected private public private private 접근 불가 protected private protected public protected private 접근 불가 protected protectedpublic 상속은 기본 속성을 그대로 가져온다. 일반적인 경우 대부분 public 상속을 이용하면 된다. private 상속은 부모 클래스의 private을 제외한 멤버를 private속성으로 가져온다. 부모 클래스의 멤버를 숨길때 사용한다. protected 상속은 부모 클래스의 private을 제외한 멤버를 prote..
- C언어에서의 변수는 선언 장소와 키워드에 따라 각기 다른 공간에 저장된다. - 변수의 수명도 선언 장소와 키워드에 따라 다르다. 영역 함수 또는 클래스 스택 영역(Stack Segment) 지역변수, 매개변수와 같이 쓰고 지우는 일이 빈번한 데이터는 스택영역을 사용한다. 스레드 당 1개씩 생성되며, 기본 크기는 1MB이다. 이 용량을 초과할 경우 Stack Overflow가 발생한다. 데이터영역(Data Segment) 정적 데이터 (Static) 코드 내에서 static 키워드로 생성된 데이터로써, 프로그램 생성시 할당되어, 프로그램이 종료 될 때까지 존재한다. 지역, 전역, 멤버 모두 정적 변수 영역에 생성 된다. 지역 정적 변수만 해당 코드가 수행되는 순간 초기화 되고, 나머지 정적 변수들은 프..
32비트 윈도 운영체제에서 하나의 프로그램은 4GB의 메모리 영역을 가질 수 있다. 그러나 4GB를 모두 어플리케이션 마음대로 사용할 수 있는 것은 아니고, 상위 2GB만 프로그램이 사용할 수 있도록 하였고, 하위 2GB는 Windows가 실행된 프로그램을 관리하기 위한 코드가 적재된다. 위의 스택, 코드 등의 영역은 하위 2GB에 포함된다. 가상 메모리상태 (Virtual Memory Status) 1. 램에 맵핑된 상태, 하드 디스크에 맵핑된 상태 2. 사용이 예약되어 읽거나 쓸 수 있는 상태 3. 초기 상태 등급 내용 Committed 물리적 메모리에 맵핑된 상태의 메모리 영역이다. Commit 상태의 메모리 영역은 읽거나 쓸 수 있다. VirtualAlloc()을 통하여 Commit 상태로 변경할..
- Total
- Today
- Yesterday
- 바로가기 프로그램
- 게임개발포에버
- Rails
- SDL
- TDD
- TraceRoute
- CppSQLite
- 디자인 패턴
- RoR
- NDC2013
- ftp
- 멀티스레드
- Ruby on Rails
- 임백준
- ruby
- svn
- 리버스 엔지니어링
- 조엘 온 소프트웨어
- 디버깅
- 루비 온 레일즈
- 엘키
- EasyExec
- 루비
- MS-SQL
- c언어
- SQLite Spy
- perfmon
- 게임데브포에버
- 좋은 프로그래머
- EzShortcut
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |