정진하는중
썸네일 이미지

[C++] 싱글톤 디자인 패턴(Singleton Design Pattern)

프로파일러를 만들다 보니 단 하나의 객체를 만들어 사용할 일이 있었다.  싱글톤 디자인 패턴이란?소프트웨어 디자인 패턴에서 싱글턴 패턴(Singleton pattern)을 따르는 클래스는, 생성자가 여러 차례 호출되더라도 실제로 생성되는 객체는 하나이고 최초 생성 이후에 호출된 생성자는 최초의 생성자가 생성한 객체를 리턴한다. 이와 같은 디자인 유형을 싱글턴 패턴이라고 한다.- 위키피디아 - 현대 C++에서 사용하는 방식으로는 클래스 인스턴스를 단 하나 가지는 방식을 사용할 수 있다.이를 위해 생성자를 막고, 정적 클래스 멤버 함수 안에서 정적 지역 변수로 객체를 생성하여 반환하는 방식이다.  주요 특징인스턴스 유일성: 싱글톤 패턴을 사용하면 클래스의 인스턴스가 하나만 생성됨을 보장합니다.전역 접근: 인..
썸네일 이미지

[복사 생략] 복사 생략

1. 복사 생략(Copy Elision) 이동에 대한 개념을 다루기 전에 컴파일러가 불필요한 복사와 이동 연산을 최적화하기 위해 사용하는 기술을 다룹니다.해당 내용은 VC의 기준이며, C++ 17 이상, 최적화 컴파일 옵션을 적용한 Release 버전 기준입니다.  1-1 RVO(Return Value Optimization)C++17 이후에 반드시 적용되는 RVO는, 함수가 지역 변수(객체)를 반환할 때 임시 객체의 생성 자체를 피하고 직접 반환 값이 저장될 위치에 객체를 생성하는 최적화 기법입니다.  함수의 리턴이 아닌 이름 없는 임시 객체의 경우에도 이것이 적용되었습니다.#include using namespace std;class A { int data_;public: A(int dat..
썸네일 이미지

[C++ STL] List 구현과 Iterator

STL, List, Iterator에 대한 공부를 하며 작성한 메모입니다.  1. list 구현  STL에서 지원하는 iterator(반복자)를 지원하는 방식 List의 구현에는 여러 방식이 존재합니다. 구현에 사용된 방식은 멤버 변수 _head와 _tail이 임의의 값을 가지는 형태로 구현하였습니다.templateclass Node{public: Node() : prev(nullptr), next(nullptr), data(0) {} Node(const T& data) : prev(nullptr), next(nullptr), data(data) {}public: Node* prev; Node* next; T data;};templateclass List{public: class Iterator { pu..
썸네일 이미지

[다형성] 추상 클래스와 가상 함수 테이블

광고가 없는 개인 저장용 블로그입니다. 가상 함수와 가상 함수 테이블을 알고 있다고 가정한 메모입니다.자세한 내용을 알고 싶으면 출처를 참조하시길 바라겠습니다.  1. 가상 함수 테이블 출처를 타고 가시면 자세한 내용을 읽을 수 있습니다. 해당 사진을 사용한 이유는 링크된 본문의 글을 읽고가상 함수 테이블을 가지는 여러 상황에 대해 활용하다가 실수할 수 있는, 헷갈리던 개념을 기록하기 위해서입니다.   1-1 추상 클래스 순수 가상 함수를 하나 이상 가진 클래스일 경우 객체를 생성할 수 없는 추상 클래스로 상속을 받은 클래스에서 반드시 override을 통해 사용하여야 합니다. 어떻게 활용하는가? 추상 클래스는 객체를 만들지 못할 뿐이지, 추상 클래스 포인터가 함수를 호출할 경우 런타임 다형성을 통해 가..
보호 글 보호되어 있는 글입니다.
썸네일 이미지

시간 함수

광고가 없는 개인 저장용 블로그입니다. 자세한 내용은 링크한 출처를 참조 바랍니다. 1. 해상도 모든 시간 관련 함수들은 저 마다의 해상도를 가지며, 얼마나 많은 Tick을 쪼개어 시간을 표현하고자 하는지에 따라 저해상도와 고해상도를 나눌 수 있다.   2. GetTickCount / GetTickCount64 운영체제가 실행된 이후 경과 시간을 ms 단위로 반환합니다.윈도우의 기본 타이머 정확도는 15.625ms(15,625,000ns), 타이머 인터럽트의 발생 횟수에 영향을 받는 함수입니다.이 함수는 3번 항목에서 다루는 timeBeginPeriod를 통해 조절된 타이머 인터럽트에 영향을 받지 않습니다.함수의 반환 값은 운영체제가 기본 타이머의 시간 단위에 맞춰 반환 할 변수를 업데이트하기 때문입니다..