본문 바로가기

C++24

[C++] delete와 소멸자 ~class() 간단 요약 : delete() 자체 null 체크 기능 포함 delete() 호출 시 메모리 할당 전 개체의 소멸자(~class() )를 호출함 관련한 문제 발생과 해결 과정 1. 템플릿을 사용한 싱글톤 클래스를 생성 후 원하는 곳에 상속시켜 쓸 예정이었음 2. 싱글톤 상속 후 메모리 해제 과정(AAA::DestroyInstance() 호출) 중 오류가 남 3. 찾아보니 상속받은 AAA클래스에서 public을 제외한 상속 접근 지정자에서 소멸자(~AAA() )를 정의하면 오류가 남 4. delete 할 때 instance 참조 때문에 접근 지정자에 영향을 받음 5. DestroyInstance() 내부의 delete instance 실행 시 AAA의 ~AAA() / protected 접근 불가 해결법 :.. 2022. 10. 13.
[C++] 헤더 / 라이브러리에 관해 라이브러리 포함 Compiler가 알고 있는 디렉토리에서 .h 파일을 찾아서 포함 " " #include를 사용하는 source code가 있는 디렉토리에서 .h 파일을 찾아서 포함 - 위치와 사용법에 따라 와 " " 를 구분해서 사용한다. 사용법 : 아래와 같이 추가 포함 디렉토리에 해당 라이브러리의 경로를 입력해주면 를 이용하여 사용 가능 정적 라이브러리 ( . lib) Object file의 모음 기계어( . obj)로 번역된 함수 정의의 모음 라이브러리 사용 장점 코드를 남에게 전달할 때 소스코드로 전달하는 것은 바람직하지 못해 라이브러리를 전달한다. 바뀌지 않는 소스코드의 내용도 다른 소스코드 수정 후 컴파일 할 경우 계속해서 컴파일을 한다. 라이브러리로 만들면 컴파.. 2022. 10. 11.
[C++] 프로젝트 생성 관리 1. 빈프로젝트 생성 2. 솔루션 내부의 데이터 삭제 3. 프로젝트가 생성된 폴더로 이동 4. Include(코딩에 필요한 파일), Bin(실행 관련 파일) 폴더 생성 5. 프로젝트 관련 파일을 Include 폴더에 넣음 6. 솔루션에 해당 프로젝트 추가 7. 프로젝트 우클릭 - 속성 8. 구성, 플랫폼 적절히 설정 / 출력 디렉토리(실행파일 생성 위치) 경로 입력(../Bin/) 9. 필요에 따라 구성 형식) 변경 참고: 어소트락 게임아카데미, WinApi 2D 게임제작 11화 프레임워크 프로젝트 설정 및 싱글톤, 2018.03.13 https://www.youtube.com/watch?v=ZnsSECL-xxQ 2022. 10. 11.
[WinAPI] DeltaTime(델타타임) 구현 DeltaTime(델타타임) 한 프레임당 실행하는 시간이다. QueryPerformanceFrequency(LARGE_INTEGER* ) 카운트값이 1초에 증가되는 양을 반환 QueryPerformanceCounter(LARGE_INTEGER* ) 현재 시간의 카운트 값을 반환 따라서 업데이트 전의 카운트값과 후의 카운트값의 차이를 이용하여 업데이트 1사이클마다 증가되는 카운트값을 알 수 있고 이를 1초 카운트 증가값으로 나누면 업데이트에 걸린 시간을 알 수 있다. 이것이 곧 델타타임이다. 델타타임 == (현재카운트값 - 이전카운트값) / 1초카운트증가값 #include #include using namespace std; int main() { LARGE_INTEGER prevCount, frequen.. 2022. 10. 10.
[WinAPI] 자동 생성 기본 구조 해석 Main int APIENTRY wWinMain(_In_ HINSTANCE hInstance, _In_opt_ HINSTANCE hPrevInstance, _In_ LPWSTR lpCmdLine, _In_ int nCmdShow) C++가 기본적으로 main(){ }안에서 돌아가는 것과 같은 맥락 WinAPI에서는 wWinMain()안에서 모든 로직이 작동 MyRegisterClass ATOM MyRegisterClass(HINSTANCE hInstance) ATOM MyRegisterClass(HINSTANCE hInstance) { WNDCLASSEXW wcex; wcex.cbSize = sizeof(WNDCLASSEX); wcex.style = CS_HREDRAW | CS_VREDRAW; wcex... 2022. 10. 10.
[C++] string 관련 참고사항 swap(A, B); swap(str1, str2); - 스왑 시 복사를 사용하지 않고 바꾸기 때문에 복사에 의한 성능 저하 X remove(first, end, removeValue); #include remove(s.begin(), s.end(), removeValue); - removeValue에 해당하는 값들을 first부터 end까지 순환하여 모두 제거, - 리턴값은 제거되지 않은 마지막 요소를 가리키는 반복자 리턴 remove() 주의사항 string str = "ABCD"; remove(str.begin(), str.end(), "A"); cout 2022. 10. 10.