본문 바로가기

Programming/C++

[C++11] Rvalue Reference #2 - Move Semantics Move Semantics Move Semantics란 객체의 리소스(동적으로 할당 된 메모리와 같은)를 또 다른 객체로 전송(이동)하는 것을 의미합니다. 앞에서 살펴보았던 Rvalue 참조자는 Move Semantics의 구현을 가능하게 하고 이로 인해 상당한 성능을 향상시킬 수 있습니다. Rvalue는 프로그램 어디에서도 참조될 수 없는 임시 객체이지만 Rvalue 참조자를 이용하여 임시 객체의 리소스를 이동시킴으로서 쓸데없는 메모리 할당과 복사 작업을 생략하여 성능이 향상되는 것이죠. 복잡한 설명보다는 간단한 예제를 보면서 설명을 드리는게 좋을 것 같네요. 메모리 버퍼를 관리하는 MemoryBlock 이라는 클래스를 작성하고 이 클래스 객체를 vector에 삽입하는 코드를 작성해보도록 하겠습니다. .. 더보기
Lvalue Rvalue C++ Lvalue와 Rvalue에 대한 오해Lvalue와 Rvalue는 보통 Left-value(왼쪽값)과 Right-value(오른쪽값)로 풀어서 씁니다. 이 때문에 대입 연산자(=)를 기준으로 왼쪽에 위치하는 값이 Lvalue이고 오른쪽에 위치하는 값이 Rvalue라고 이해하고 계신 분들이 많습니다. 이것은 C 표준에 입각하여 살펴보면 완전히 틀린 얘기는 아니지만(C 표준에서는 대입 연산자(=)를 기준으로 왼쪽과 오른쪽에 모두 사용될 수 있는 값은 Lvalue이고 오른쪽에만 사용될 수 있는 값이 Rvalue라고 정의하고 있습니다) 잘못된 이해이며, C++ 관점에서는 전혀 다른 관점에서 해석할 필요가 있습니다. C++ 표준에서는 더이상 에서 L과 R은 Left와 Right를 의미하지 않습니다. 지금부.. 더보기
에러 핸들링(Error Handling) window함수들은 반환형을 가지고 있다. 반환타입은 대개 함수의 성공과 실패를 나타내는 데 쓰이며, 각 자료형의 의미는 다음과 같다. 자료형 실패했을 때의 값 VOID 이 함수는 절대 실패 하지 않는다. BOOL 성공시 0이 아닌 값, 실패하면 0 (주의 : 성공시 0이 아닌 값이기에 TRUE(1)과 비교하지 말자) HANDLE 성공시 유효한 핸들, 실패하면 0(NULL) or (INVALID_HANDLE_VALUE) 실패의 경우가 나뉘므로 SDK를 참조하여 프로그래밍을 하자. PVOID 성공시 데이터를 저장하고 있는 메모리 주소를 반환, 실패시 NULL반환 LONG/DWORD HANDLE과 마찬가지로 실패의 경우가 각 함수마다 다르므로 SDK를 참조하여 프로그래밍을 하자. 함수가 실패하는 경우에는 전.. 더보기
this pointer : this 포인터는 클래스에 대한 포인터 값이 아니라, new연산을 통해 객체가 생성될 때 만들어지는 것이므로 생성된 객체의 고유한 값이다. 참조의 범위는 protected,private 키워드와 마찬가지로 객체 외부에서는 접근이 불가능 하다. this 포인터는 클래스의 모든 멤버(field&method)에 접근을 할 수 있는데, static keyword로 생성된 필드와 메서드는 접근을 할 수 없다.(정적 메모리는 객체가 생성되기전에 메모리에 잡힘.) Source: Instruction: void Date::setMonth( int mn ) { month = mn; // 객체내에서 맴버를 부를 때, 일반적으로 this가 암시적으로 호출된다. this->month = mn; // ->연산을 통해서도 접.. 더보기
error C2065: 'IDD_Main_DIALOG' : 선언되지 않은 식별자입니다. MainDlg.h 파일에 #include"resource.h"을 추가 해주면 된다. - main dialog외의 다른 클래스나 객체에서 main dialog의 핸들(인스턴스)을 얻어오려면, 객체의 cpp파일에 #include"MainDlg.h"처럼 메인 다이얼로그 헤더파일을 추가시켜주고 MainDlg* pDlg = (MainDlg*)AfxGetMainWnd(); 해주면 된다. AfxGetMainWnd()함수는 함수명에서 볼수 있듯이 메인 다이얼로그의 핸들을 리턴한다. 더보기
Bitmap File구조 *Bimap File format(구조) BITMAPFILEHEADER -> File header :에 정의, bmp파일인지 분석함!!, size : 14byte bftype : bmp파일이라면 BM이라는 글자가 저장.. ex) if(bmfh.bftype != 0x4D42)비트맵 파일이 아닐 경우 처리... *0x4D42는 아스키값으로서 보면 B와D를 나타냄.. bfsize : bmp파일의 전체크기를 저장!(파일헤더+이미지헤더+컬러테이블+픽셀데이터) BITMAPINFOHEADER -> Image header :비트맵 파일에서 파일헤더 구조체 다음에 위치함!!,bmp파일에 대한 영상정보를 저장! biBitCount : 1Pixel당 비트수 ->비트수에 따라 Pixel데이터를 처리 하는방법이 다름!! 256.. 더보기