목록게임프로그래밍 (83)
bdfgdfg
default,delete C++11에서부터 default키워드를 이용하여 명시적으로 default한 생성자를 선언할 수 있다. 1 2 3 4 5 6 7 class Test { // 컴파일러가 기본적으로 기본생성자,소멸자,복사생성자등을 만든다. private: int m_test; }; Colored by Color Scripter cs C++11이전부터 클래스 내부의 생성자를 만들지 않더라도 기본적으로 기본생성자,복사생성자,대입복사연산자,소멸자 등을 만들어 줬다. (+ C++11이후에는 기본 생성 함수에 move 생성자와 대입연산자도 추가되었음) 기본 함수를 정의하면 컴파일러는 해당 기본 생성자를 만들어 주지 않는다. default키워드는 그것을 명시적으로 만든다. 그렇기에 비어 있는 생성자나 소멸자를..
auto C++11에서 등장한 문법이며 변수의 자료형을 컴파일 타임에 추론하여 자료형을 결정한다. -> 그렇기에 auto 변수를 반드시 초기화 해야 된다. (동적(런타임)으로 자료형이 결정되지 않으므로) -> 런타임에 결정되는게 아니므로 런타임 성능에 영향x auto를 사용하여 포인터와 참조를 받을수도 있다. -> 포인터를 받을 때 선언 : auto 혹은 auto* -> 참조를 받을 때 선언 : auto& 포인터는 기본 auto로 받아도 되고 auto*로도 받을 수 있다. 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 class Test { public: Test(std::string& value) : m_str(value) {..
세션 A의 작업이 완료 큐에 남아있을 때 세션을 삭제하면 어떻게 될까. 나는 WSARecv,WSASend를 소켓 대상으로 했을 때 WSAGetLastError가 PENDING이 아니라면 바로 세션을 끊어버렸었다. 여기서의 문제는 세션이 가르키는 힙 메모리 영역의 메모리는 지워졌지만, Session이 그 메모리를 가리키는 주소 값은 삭제를 할 당시에 nullptr로 밀어도 원래 가리키던 주소 값으로 반환해준다. -> CP객체에 소켓과 완료키를 등록할 때 복사를 하는 방식인듯하다. 심지어 GQCS함수의 return값도 true, transferrbytes도 완료가 되었을 때의 송수신된 바이트가 기록되어있고 overlapped도 살아있다. 그렇기에 일반적인 체크로는 Session의 연결을 끊어버렸을 때 위와 ..
아래의 값은 컴파일러에 의해서 세팅되는 메모리 값입니다. (*가급적 모든 변수/메모리는 반드시 초기화하는 습관을 가지는것이 제일 듯합니다.) - 64 bits [초기화 되지 않은 지역변수] 0xCCCCCCCCCCCCCCCC [초기화 되지 않은 Heap 메모리] 0xCDCDCDCDCDCDCDCD [Free된 Heap 메모리] 0xDDDDDDDDDDDDDDDD or 0xFEEEFEEEFEEEFEEE [할당된 Heap 메모리를 벗어난 공간] 0xFDFDFDFDFDFDFDFD - 32 bits [초기화 되지 않은 지역변수] 0xCCCCCCCC [초기화 되지 않은 Heap 메모리] 0xCDCDCDCD [Free된 Heap 메모리] 0xDDDDDDDD or 0xFEEEFEEE [할당된 Heap 메모리를 벗어난 공간..