프로그래밍

JAVA, C#과는 달리 가비지 컬렉터가 없는 C++은 사용하지 않는 리소스를 해제해줘야 한다. 사용하지 않은 리소스는 메모리 누수라고 한다. 대신에 C++는 RAII라는 원칙이 있다. Resource acquisition is initialization의 약자인데, 솔직히 이름만 봤을땐 단번에 무슨 뜻인지 알기 어렵다. 간략하게 말하자면, 리소스를 클래스로 캡슐화해서 클래스의 인스턴스로 리소스를 사용하고, 스코프를 벗어나면 리소스를 자동으로 해제하는 것이다. 개체가 생성되었을때 호출되는 생성자로 리소스를 할당받으며 개체가 스코프를 벗어나면 소멸자가 호출되어 리소스를 해제한다. https://docs.microsoft.com/ko-kr/cpp/cpp/object-lifetime-and-resource-m..
유니티 C#을 하다가 알게 된 점인데, string을 +연산자로 더할때마다 새로운 문자열 객체를 생성한 뒤 반환하기 때문에 비효율적이라는 것이다. 그래서 string을 자주 변경해줘야할 경우 내부의 버퍼만 변경해주는 StringBuilder라는 클래스를 사용하는 것을 권장하고 있다. 이 점을 인지하고 있는 상태에서 C++로 문자열 관련 문제를 풀다가 +연산자로 concat을 처리하는 것을 보고 궁금해져 검색해보았다. https://stackoverflow.com/questions/611263/efficient-string-concatenation-in-c Efficient string concatenation in C++ I heard a few people expressing worries about ..
군대에 있을때 해봐야지하고 까먹고 있었는데 얼마전에 여기 블로그에 글써놓은거 보고 생각나서 설치해봤다. 소스코드는 github.com/Virtus77/pysc2-agent에 올리고 있다. 지금은 사실 직접 짠 코드는 아니고 github.com/skjb/pysc2-tutorial 이걸 보고 구조를 익히고 있다. Create Game Reset Observe Act If game is not finished go Observe else Reward go Reset 전체 흐름이 이렇게 진행되는데 사람이 실제로 게임하는 방식을 그대로 시뮬레이팅 하는 방식이 신기하다. 예를들어 배럭을 지을때 scv선택, 키보드B, 키보드S, 클릭 이런 일련의 동작을 action으로 만들어서 사용한다. 사진엔 안나와있지만 화면(카..
반복자를 사용할 때 얻는 이점 컨테이너의 요소들에 직접 접근하는 대신 반복자를 사용하는 경우 얻는 가장 중요한 이득은 다음과 같다. 직접 접근하는 방식은 클래스의 캡슐화를 무너뜨린다. 반면 반복자는 컨테이너의 구현 세부사항을 외부에 노출하지 않으면서도 효율적으로 순회 할 수 있다. 반복자는 순회 과정을 단순화한다. 대부분의 반복자는 배열의 인덱스나 포인터와 비슷하게 동작하기 때문에 순회할 때는 간단한 루프를 짜 반복자를 증가시켜가며 끝나는 조건과 비교하면 된다. 번외 postincrement(i++)와 preincrement(++i) 연산자의 차이는 뭘까? preincrement 전치 증가 연산자 증가를 끝내고 난 후 피연산자의 값을 리턴. 포인터나 반복자를 증가시킨 후 그에 대한 참조를 리턴하면 됨. ..
virtus
'프로그래밍' 카테고리의 글 목록 (11 Page)