본문 바로가기
반응형

프로그래밍/C++59

C++] 스레드의 사용량을 알아보자!!(Concurrency Visualizer) 1. 소개프로그래밍을 하면서 스레드가 과연 잘 사용되고 있는지? 혹시 어딘가 block되어서 제대로 일을 못하고 있는지? mutex구간이 많아서 컨텐션이 많이 발생되는지?? 이럴때 프로그램(프로세스)을 돌리면서 실시간 데이터 정보를 받아 각 스레드의 사용량을 보여주는 프로그램이 있습니다. Visual studio의 확장 프로그램인 Concurrency Visualizer for Visual studio 프로그램 입니다. 저는 Visual studio 2019 버전을 사용했습니다. 2. 설치 방법1. 2. 3.설치가 완료되면 visual studio를 껏다 켜주세요. 그럼 마저 설치가 된 후 프로그램을 실행할 수 있습니다. 3. 사용 방법#include #include #include #include #i.. 2020. 11. 8.
C++] visual studio 에서 deadlock 상태 확인하기(CRITICAL_SECTION) 1. CRITICAL_SECTIONCRITICAL_SECTION 클래스는 에서 제공하는 MFC 라이브러리 기능입니다. CRITICAL_SECTION 은 데드락이 발생했을시 디버깅을 통해서 쉽게 원인파악이 가능합니다. 2. 예제 코드#include #include #include using namespace std; class CriticalSection{ CRITICAL_SECTION m_critSec;public: CriticalSection() { InitializeCriticalSectionEx(&m_critSec, 0, 0); } ~CriticalSection() { DeleteCriticalSection(&m_critSec); } void Lock() { EnterCriticalSection(&.. 2020. 11. 5.
C++] template을 헤더파일에 정의하기. (선언만 하면 왜 안될까?) C++ 에는 다른 언어에 있는 template이라는 키워드가 존재합니다. template은 프로그램의 유연성을 제공해주죠. 코드 또한 간결해지고요. C++의 코드를 짜다보면 헤더파일에 클래스, 함수 등을 선언만하고 실제 구현은 다른 cpp파일에 정의하게 됩니다. 즉, 파일을 분리하는 것이죠. 이것의 장점은 코드 관리가 쉬워진다는 점입니다. 단점이 된다면 코드를 보는것이 다소 복잡해 질 수도 있지요. 그럼에도 불구하고 분할 컴파일을 많이하고 있습니다. 기능적인 부분들을 분리해서 정의하는 것이 관리에 있어서, 수정함에 있어서 좋은것은 사실이니 말이죠. 하지만 템플릿은 헤더파일에 선언만 해서는 동작하지 않습니다. 컴파일 시 애러 메시지를 띄워주죠. 예시를 보겠습니다. 1. template을 헤더파일에 선언. .. 2020. 9. 4.
C++] perfect forwarding 이란?(완벽 전달자) C++에는 템플릿이라는 항목이 있습니다. 템플릿은 타입을 정하지 않은 것으로 코드에 유연성을 제공하게 됩니다. 대표적으로 템플릿이 있는걸 접할 수 있는 라이브러리는 STL의 vector, map, queue 등이 있습니다. 이 템플릿엔 특이한점이 있는데 std::forward가 있다는 것입니다. 우선 템플릿에 대한 기본적인 설명을 해보겠습니다. 기본적인 template 함수 #include template void fnc(T n) { std::cout 2020. 8. 31.
C++] boost에 openssl을 사용해 ssl 적용하기. 1. 구축환경 운영체제 : Ubuntu 20.04 openssl : 1.1.1f 2020/03 g++ : 9.3.0 boost : 1.71 ※ 이 외에도 저는 cpprestSDK를 사용하기 때문에 라이브러리를 불러오는 과정에서 약간의 차이점이 있을 수 있습니다. ※ 해당 예제는 클라이언트에서 load_verify_file() 를 사용해 서버의 인증서를 확인하는 예제입니다. 2. openssl로 인증서 만들기 1) Root certificate root private key $ openssl genrsa -out rootca.key 2048 ※ 위 인증서는 인증서 요청을 할 때 암호를 일일히 안쳐줘도 되는 인증서입니다. 클라이언트 측에서 인증서를 요청할 때 해당 인증서의 비밀번호를 요구하는 인증서를 만들 .. 2020. 7. 15.
C++] 가상 함수를 생성자에 사용하면?? 최근 기업 시험을 보는데 이런 문제가 나왔습니다. "가상함수를 생성자에 사용한다면 어떻게 되는가?" 이 문제를 봣을 때 "이건 뭐지??" 라는 생각이 먼저 들었습니다. 왜냐하면 생성자에서 가상함수를 호출할 생각 자체를 제 평생 한번도 해본적이 없기 때문입니다. 왜냐?? 사용할 이유가 없으니깐요.... 가상 함수니깐요.... 가상 함수의 의미는? overriding 이죠. 다형성이죠. 또한 순수 가상 함수는 재 정의를 해줘야하는 함수입니다. 재 정의를 해야할 함수를 생성자를 통해 호출을한다?? 아마 사용자의 실수로 호출을 하지 않을까... 싶네요....코드가 길어지면 어느 클래스에 어떤 맴버함수가 있는지 잘 기억이 안나니깐 말이죠... 그래서 저는.... 찾아보고....경험해보고.... 그래서 이 글을 쓰.. 2020. 6. 22.
C++] 싱글톤(Singleton)정의 방법과 설명. C++에서 자주는 아니지만 심심치않게 싱글톤(Singleton)을 활용한 사례들을 본적이 있습니다. 굳이 사용하지 않아도 알아두면 좋은 기법입니다. 왜냐하면 클래스의 거의 모든걸 고루 담고 있기 때문입니다. static변수, private 생성자, 소멸자, 늦은 초기화 등..... 꽤 얻어갈 정보들이 있습니다. 때문에 소개하고 설명해보고자 합니다. 1. 싱글톤(Singleton)이란?싱글톤은 말 그대로 혼자라는 뜻입니다. 클래스의 생성을 딱!! 1개로 정한다는 뜻이죠. 따라서 해당 클래스의 객체는 static으로 생성이 됩니다. 물론 여러개의 변수가 하나의 클래스를 가르킬 순 있겠죠. 하지만, 그 클래스의 객체가 복사가 되면 안됩니다. 즉, 똑같은 클래스 정보가 2개 이상 늘어나면 안된다는 것이죠. 이렇.. 2020. 6. 21.
C++] virtual function(가상 함수)에 대하여...(햇갈리는 분들~ 어여 드루와) 예전에 작성한 가상 함수글이 있습니다. 하지만 조금 미흡한것 같아 다시 작성해봅니다. 1. 일반적인 상속관계에서의 생성자, 소멸자 호출일반적으로 클래스를 정의하고 객체를 선언하면 다음과 같은 생성자, 소멸자 호출이 됩니다. 1) 생성자, 소멸자 호출 확인 코드.#include class A {private:public: A() { printf("A 생성자\n"); } ~A() { printf("A 소멸자\n"); }}; class B : public A{private:public: B() { printf("B 생성자\n"); } ~B() { printf("B 소멸자\n"); }};int main(void) { B b; return 0;} B객체를 선언했는데 상속된 부모 클래스의 A생성자와 소멸자가 호출되.. 2020. 6. 21.
C++ 가상 상속(virtual inheritance) 1. 가상 상속(virtual inheritance) 이란??C++에선 다중상속을 지원합니다. JAVA는 다중상속을 막고 있지요.다중상속은 장점과 단점이 존재합니다.장점으론 객체지향의 상속성을 좀 더 유연하게 해주는 역할을 하죠.하지만 단점은 다이아몬드 상속구조를 띌 수 있으며, 이는 메모리 낭비, 성능저하로 이어질 수 있습니다. 그럼 다음 그림과 같은 형태로 상속을 진행해 보겠습니다. 그림코드 #include class A {public: A() { printf("A 생성자\n"); } ~A() { printf("A 소멸자\n"); } int A_num;}; class B : public A {public: B() { printf("B 생성자\n"); } ~B() { printf("B 소멸자\n"); .. 2020. 6. 20.
C++ 순수 가상 함수란? 추상 클래스란??(pure virtual function, abstract class) 1. 순수 가상 함수란?(pure virtual function) C++에서의 순수 가상 함수란 무엇일까요?? virtual void foo() = 0; 이렇게 생긴 녀석들을 순수 가상함수라고 부릅니다. (pure virtual function) 함수의 정의가 이뤄지지 않고 함수만 선언한 것이지요. 이렇게 선언된 순수 가상 함수가 있다면 이를 추상클래스(abstract class)라고 부릅니다. 또한 이 추상클래스는 객체로 만들지 못하고 상속으로써만 사용됩니다. 그리고 추상클래스를 상속받은 자식 클래스는 무조건 해당 순수 가상 함수를 override 시켜줘야 합니다. 이 추상클래스, 순수 가상 함수가 어떤 이점이 있으며, 어느 상황에 사용하는지 설명함에 앞서 함수 객체의 생성이 안되는지부터 확인해보겠습니.. 2020. 6. 20.
C++] reinterpret_cast에 대해서... 모든 언어에는 형변환이 있습니다. C++에선 다양한 형번환 객체들을 제공합니다. 1. static_cast = https://hwan-shell.tistory.com/211 2. dynamic_cast = https://hwan-shell.tistory.com/213 3. const_cast = https://hwan-shell.tistory.com/215 4. reinterpret_cast 가 있습니다. 그 중 reinterpret_cast에 대해 알아보도록 하겠습니다. 1. reinterpret_cast란?cast중 가장 쎈놈? 입니다. cast방식은 포인터 -> 포인터, 포인터 -> 일반변수, 일반변수 -> 포인터로주로 포인터 관련된 cast입니다. 단, 자료형 -> 다른 자료형은 안됩니다. rei.. 2020. 6. 17.
C++] const_cast에 대해서... 모든 언어에는 형변환이 있습니다. C++에선 다양한 형번환 객체들을 제공합니다. 1. static_cast = https://hwan-shell.tistory.com/211 2. dynamic_cast = https://hwan-shell.tistory.com/213 3. const_cast 4. reinterpret_cast = https://hwan-shell.tistory.com/219 가 있습니다. 그 중 const_cast에 대해 알아보도록 하겠습니다. 1. const_cast란??이름만 보면 const를 cast해 const변수를 바꾸는 그런역할을 할 것 같이 생긴 녀석입니다.맞으면서도 다릅니다. const_cast를 할 수 있는 조건이 있습니다. 1. const로 선언된 포인터만 const를.. 2020. 6. 15.
C++] dynamic_cast에 대해서... 모든 언어에는 형변환이 있습니다. C++에선 다양한 형번환 객체들을 제공합니다. 1. static_cast = https://hwan-shell.tistory.com/211 2. dynamic_cast 3. const_cast = https://hwan-shell.tistory.com/215 4. reinterpret_cast = https://hwan-shell.tistory.com/219 가 있습니다. 그 중 dynamic_cast에 대해 알아보도록 하겠습니다. 1. dynamic_cast란?class의 상속관계에서의 형변환을 프로그래머가 올바르게 하도록 도와주는 긴능을 제공하는 녀석입니다.dynamic_cast는 RTTI(Run Time Type Information)을 지원합니다.RTTI는 런타임.. 2020. 6. 14.
C++] static_cast란?? 모든 언어에는 형변환이 있습니다. C++에선 다양한 형번환 객체들을 제공합니다. 1. static_cast 2. dynamic_cast = https://hwan-shell.tistory.com/213 3. const_cast = https://hwan-shell.tistory.com/215 4. reinterpret_cast = https://hwan-shell.tistory.com/219 가 있습니다. 그 중 static_cast에 대해 알아보도록 하겠습니다. 1. static_cast란?C++에서 제공하는 기능중 하나로 프로그래머가 형변환을 할 때 오류를 체크해 줍니다. 이 오류는 코드상에서 체크해줍니다. 마치 없는 변수나 함수를 사용자가 사용할 때 처럼 말이죠. 그럼 예시를 보겠습니다. 1) 일반.. 2020. 6. 14.
C++] Visual studio에서 C++ 버전 변경과 사용방법.(C++14, 17, 20) Visual studio를 사용하면서 새로 정의된 class를 사용하고 싶을 때 지원하는 C++버전이 맞지 않아서 호출되지 않는 경우가 있습니다. 그럼 Visual studio에서 버전을 확인하는 방법과 C++을 버전별로 사용하는 방법을 알아보도록 합시다. 1. 도움말 -> Microsoft Visual Studio 정보(A) 2. C++ 버전 변경방법. 1. 프로젝트 -> 속성 -> C/C++ -> 모든 옵션 -> C++ 언어 표준 2. 여기서 원하시는 버전을 선택하면됩니다.마지막에 있는 /std c++ latest는 C++의 마지막 버전이 입력됩니다. 즉, 가장 최신버전입니다. C++ 버전 고정하는 방법. 추가 옵션 글상자에 명령어를 입력해주면 됩니다. /std:c++14/std:c++17/std:c.. 2020. 6. 13.
반응형

스킨편집 -> html 편집에서