목록분류 전체보기 (162)
Coding Memo
TcpClient 및 TcpListener는 Socket을 직접 컨트롤 하지 않고 간단하고 빠르게 서버를 오픈하고 클라이언트로 서버에 연결할 수 있도록 구성되어 있는 기본 클래스이다. https://learn.microsoft.com/en-us/dotnet/api/system.net.sockets.tcpclient?view=net-7.0 TcpClient Class (System.Net.Sockets) Provides client connections for TCP network services. learn.microsoft.com 특징으로는 동기 및 비동기 메서드를 포함하고 있다는 것과 Send와 Receive시에 NetworkStream으로 데이터를 읽고 쓸 수 있다는 점이다. 추가적으로 Client..
Use After Free는 해제된 메모리를 더 이상 사용하지 않아야 되는 상황에서 사용하려고 할 때 나타나는 매우 큰 문제이다. (Java나 C#같은 high-level 언어들은 이 문제에 신경을 덜 써도 된다.) Use After Free 문제는 다음과 같은 상황에서 일어날 수 있다. 메모리를 delete(free)한 후에 그 영역에 접근하려고 할 때 즉, 객체의 관점에서 본다면, 객체를 delete(free) 했지만 객체에 대한 포인터가 그대로 남아있어 그 포인터에 접근하려고 할 때 일어난다. 다음 코드를 살펴보고 문제가 되는 점을 찾아보자. using namespace std; class A { public: A() { cout
C++에는 값을 다음과 같이 분류할 수 있다. 정의 특징 gvalue generalized lvalue; 변수, 객체, 객체 멤버에 대한 모든 lvalue 표현식; lvalue와 xvalue가 여기에 모두 포함 prvalue pure rvalue; 일반적인 값으로 객체일 때 소멸자를 호출하지 않아도 되는 값; 어떤 연산자의 피연산자 값을 계산하거나 어떤 객체나 비트 필드를 초기화 할 때 계산되는 값 xvalue rvalue로 캐스팅 된 lvalue; 리소스를 재사용할 수 있는 개체나 비트 필드; 내부가 expiring 상태로 비어있음 (껍데기만 남아있음) - 내부 데이터가 만료되어 있는 상태일 수 있음 - 왼값을 move로 내부 데이터가 이동하면 xvalue가 됨 (캐스팅) lvalue 실체를 가지고 있..
로깅 라이브러리를 찾아보다가 한번 설치해보았다. 로깅을 위한 라이브러리로 C++14이상에서 작동한다. Google에서 만든 라이브러리로, 규모가 큰 프로젝트에 적합하다. 다른 라이브러리와 마찬가지로 로깅 레벨(INFO, WARNING, ERROR, FATAL)을 설정가능하다. 또한 조건부 로깅이 가능하다. (특정 조건에 의해서만 로깅을 할 수 있다. 매크로로 처리된다.) FATAL 로깅시에 해당을 로깅한 후에, 프로그램을 정지시키는 기능도 포함한다. 특징은 대용량 로그 처리가 가능하다는 것이라고 나와있다. 로그 파일을 자동을 분할하고 압축하는 기능을 제공하고 있다. 다만, 그만큼 조금 무거운 라이브러리이다. 설치 방법은 공식 문서에도 나와 있다. 사용해 볼 기회가 언젠가 있지 않을...까? 1. Gith..
메타 함수(Meta Function)은 컴파일 타임에 실행되는 함수가 아니라, 컴파일러에서 사용되거나 템플릿 메타 프로그래밍에서 사용하는 함수나 클래스 템플릿을 가리키는 용어이다. 즉, 런타임에서가 아니라, 컴파일 타임에 그 값이 미리 계산이 되어서 알 수 있다. C++ 의 메타프로그래밍에는 반복문 구조가 없어 재귀적으로 템플릿을 구현해야한다는 것을 기억하자. 솔직히 처음부터 복잡한 코드를 보면 이게 코드가 맞나 싶을 정도로 어지러운 코드도 많은 것 같다. 간단한 예시부터 이해해보자. 피보나치 수열의 n번째 수 구하기 피보나치 수열은 다음과 같다. 1, 1, 2, 3, 5, 8, ... 그리고 그 공식은 arr[i] = arr[i-1] + arr[i-2] 이다. 위 수열에서 n번째 값은 구하기 위해서 여..
STL에서 반복자를 통해 각 원소(element)에 접근 할 수 있다. 이는 반복문에서 사용하기 편하다. 포인터 타입으로 생각하면 간단하다. STL의 모든 자료 구조는 내부 원소 순회를 위한 반복자를 제공한다. 각 템플릿마다 iterator 타입은 각각 따로 존재한다. vector::iterator vectorIntIt; vector::iterator vectorFloatIt; list::iterator listStringIt; unordered_map::iterator uMapIt; set::iterator longSetIt; 순회 방식에 따라 3가지로 나뉜다. 사용 가능 연산자 순방향 ++로 다음 반복자 이동 *, ++, ==, != 양방향 ++로 다음 반복자 이동 및 --로 이전 반복자 이동 *, ..
보호되어 있는 글입니다.
C#에서 Protobuf를 사용할 때는 간단하게 nuget 패키지에 있는 Google.Protobuf만 설치하면 되지만, C++은 직접 헤더 및 라이브러리들을 추가해주어야 한다. 만약 선택한 protobuf 프로젝트의 cmake 폴더 내에 CMakeLists.txt 파일이 있다면 아래 방법을 이용하는 방법도 있다. (보통 구버전에 해당한다.) https://minttea25.tistory.com/127 Protobuf 프로젝트에 추가하기 (Windows, CMake) C#에서 Protobuf를 사용할 때는 간단하게 nuget 패키지에 있는 Google.Protobuf만 설치하면 되지만, C++은 직접 헤더 및 라이브러리들을 추가해주어야 한다. (C#이 굉장히 편했던 것이었다!!!!!!!!!!!!!!!!!..