1. C++ member initializer lists (멤버 초기화 리스트)
-> 생성자 괄호 뒤에 콜론으로 표시해서 초기화할 멤버 변수들을 명시해줌.
-> 간단하게 : 뒤에 쓰는건데 괄호 안에 어떻게 초기화할건지 값 명시해준다고 보면 됨.
2. tcp::acceptor
-> socket에서 사용하는 acceptor와 동일한 존재이다.
-> 말 그대로 accept 를 시작하는 녀석이다.
-> 여기서 생성한 acceptor를 가지고 async_accept를 호출해서 비동기 accept를 시작하는 셈이다.
3. tcp::socket
-> stream-oriented socket 기능을 제공한다. 그냥 socket 통신할때 필요한 변수라고 보면 된다.
4. 스마트 포인터
스마트 포인터에는 세가지 종류가 있다고 한다.
-> unique_ptr
포인터를 통해 unique 한 소유권을 가지고 unique_ptr 번위를 벗어날때 해당 개체를 처리한다고 한다.
-> shared_ptr
아래와 같은 방식으로 사용한다.
std::shared_ptr<int> ptr = std::make_shared<int>(10);
참고로 접근할때는 그냥 ptr 이 아니라 *ptr을 해야 10을 찍을 수 있다.
shared_ptr 에는 reference count 개념이 있다고 한다.
소유권이 들어날때마다 이 count 가 늘어난다고 보면 된다.
그리고 그 count가 0이 되면 자동으로 삭제가 되서 메모리를 따로 해제하지 않아도 되는 형식이다.
-> weak_ptr
어떤 객체를 참조하는데 객체의 수명에 영향을 주고 싶지 않을때 사용하는데 그러면서도
dangling pointer 의 잠재 위험성을 없애고 싶을 때 쓴다고 한다.
5. self reference
-> self reference 는 객체 자신을 참조할 수 있는 참조자를 의미한다.
this 포인터를 사용해서 객체가 자기 자신의 참조에 사용 가능한 참조자의 반환문도 작성할 수 있다고 한다.
(c++ 에서도 this 가 지원되는 줄은 몰랐는데 생각보다 굉장히 유연한 언어인 것 같다.)
6. c++ auto
-> 선언되니 변수의 초기화 식을 사용해서 형식을 추론하도록 컴파일레에게 지시한다.
즉 타입 추론이 이뤄지는 거다. 그래서 초기화가 이뤄져야만 사용가능하기도 하다.
참고로 함수의 매개변수로는 사용할 수 없다.
또한 구조체나 클래스의 멤버 변수로도 사용불가하다. 왜냐면 해당 객체의 자료형 크기를 모르기 때문이다.
또한 가독성이 떨어질 수 있어서 적당히 사용해야 한다고 한다. (아마 쓰이는 유형이 어느정도 정해져있을 듯 싶다.)
7. std::move
-> 어떤 객체 t가 이동될 수 있음을 알려준다고 한다. t가 가지고 있는 자원을 다른 객체에게 효율적으로
전달하는 것을 의미한다고 한다. 이동을 수행하는게 아니라 이동 가능함을 알려주는 것 뿐이라고 함.
-> Lvalue 를 Rvalue로 casting 해준다고 생각하면 편함.
개념이 아마 좀 생소할텐데 이 블로그에 굉장히 심플하게 설명되어있다.
(https://yhwanp.github.io/2019/09/08/rvalue-and-move/)
그리고 최적화에 사용된다고 보면 된다. input 이라는 string 을 할당한 변수가 있다고 했을때 이걸 vector 에 push_back 할때 그냥 input을 전달하는게 아니라 std::move(input) 을 할 경우 좀 더 성능이 좋다고 한다. 그 이유는 move assignment operator 가 일어나서라고 한다. 새로 메모리를 할당하는게 아니라 메모리에 할당된 것을 소유권만 넘겨주기 때문에 copy assignment operator 보다 빠르다고 한다.
-> 굉장히 흥미로운 개념인데 아마 꼭 필요한 곳이 있는 것 같다. 이건 나중에 좀 더 찾아볼까 한다.
8. typedef
-> 프로그래머가 타입의 별칭을 생성하고 실제 타입 이름 대신 별칭을 사용할 수 있다.
typedef double distance_t 라고 한다면 double a 가 아니라 distance_t a 로도 가능하다.
주로 가독성때문에 많이 사용한다고 한다.
C++ boost asio tcp server 예제를 읽어봐야할 일이 생겼는데 C++ 을 사용한지 오래되서 생소한 개념들이 걸린다.
아래 블로그에서 많은 도움을 받았습니다.
감사합니다.
그나저나 c++ 프로젝트 진짜 완성은 가능할까...?
Boost-echo tcp client & server를 살펴보자 (1)
Boost는 C++을 하다보면 언젠간 반드시 꼭 사용하게될 라이브러리이다 Boost에 대한 설명은 아래에 첨부할 Boost 공식홈페이지에서 한번 읽어보는걸 추천한다 (재밌음) 처음에 boost를 사용할 때는, STL
mutpp.tistory.com
Boost-echo tcp client & server를 살펴보자 (1)
Boost는 C++을 하다보면 언젠간 반드시 꼭 사용하게될 라이브러리이다 Boost에 대한 설명은 아래에 첨부할 Boost 공식홈페이지에서 한번 읽어보는걸 추천한다 (재밌음) 처음에 boost를 사용할 때는, STL
mutpp.tistory.com
https://computer-science-student.tistory.com/78
[c++] auto 키워드
auto 키워드 auto 키워드는 선언된 변수의 초기화 식을 사용하여 해당 형식을 추론하도록 컴파일러에 지시한다. 즉, auto 키워드를 사용하면 초깃값의 형식에 맟춰 선언하는 인스턴스(변수)의 형식
computer-science-student.tistory.com
https://yhwanp.github.io/2019/09/08/rvalue-and-move/
C++ Rvalue 와 std::move 에 대한 이해
Rvalue 란 무엇인가?Rvalue, 우측값은 대입 시에 항상 오른쪽에만 오는 식을 말한다.예제로 이해하는 것이 쉽다. 123456789101112131415int doSomething(){ ... return z;}int x = 10; // x 는 Lvalue, 10은 Rvalueint y = 20; // y
yhwanp.github.io
https://kevinthegrey.tistory.com/26
*) C++를 이용한 TCP 소켓통신 구현
서버-클라이언트 환경을 만들기 위한 과정 서버 : Socket 생성 → Socket에 이름연결(bind) → 클라이언트의 연결을 기다림(listen) → 클라이언트 받아들임(accept) → 클라이언트의 명령을 받아서 적절
kevinthegrey.tistory.com
https://www.codeproject.com/Articles/1264257/Socket-Programming-in-Cplusplus-using-boost-asio-T
Socket Programming in C++ using boost.asio: TCP Server and Client
This article will help you get started with socket programming in C++. We will build a TCP server and client using boost.asio library in C++.
www.codeproject.com
'C & C++ > C++' 카테고리의 다른 글
[C++] C++ 헷갈리는 개념 간단 정리 (2) (0) | 2022.11.09 |
---|---|
[C++] Visual Studio 2022 에서 C++ rapidjson 사용하기 (0) | 2022.11.08 |
[C++] 임시 객체란 무엇인가? Temporary Object? (0) | 2022.10.19 |
[C++] C++ 에도 annotation이 존재할까? (0) | 2022.01.03 |
[C++] 마이크로소프트 c++ 도큐먼트 (0) | 2021.04.19 |