C++ 클래스의 메모리 오버헤드
2023. 6. 16. 17:31
C++
Dynamic Dispatch - 클래스가 가상 함수를 가질 경우 Dynamic Dispatch는 클래스 메소드가 오브젝트의 타입에 따라 다르게 작동하는 것이다. Virtual Function을 통해서 클래스의 다형성을 구현할 때, Dynamic Dispatch가 사용된다고 할 수 있다. 그러나 Virtual Function을 실행할 때, 컴파일러는 자동적으로 Runtime LookUp(클래스의 계층구조를 따라 적합한 함수를 선택하는 것)이라는 추가적인 동작을 한다. Vtable은 클래스가 Virtual Function을 가질 때, 자동적으로 생성되는 자료구조이며, 이 Vtable은 해당 클래스의 Virtual Function을 가리키는 포인터를 가지고 있다. 따라서, 추가적인 메모리를 할당한다. Run..
[C++11] Move Semantic에 대한 간단한 설명
2022. 9. 23. 02:39
C++
Move Semantic 은 C++ 11에서부터 도입된 특징이며, 비싼 복사 연산과 임시 객체 생성을 컴파일러가 이동 연산으로 대체할 수 있게 한다. 물론 클래스 안에서 이동 생성자와 이동 연산자가 구현되어 있어야 한다. Value Category 일반적으로 C++에서 expression은 연산자(operands)와 피연산자(encompasses operators), 리터럴(literals)과 변수 이름(variable names)을 말한다. expression은 type catecory와 value category로 나뉜다. expression은 identity라고 하는 개념을 가질 수 있으며, identity를 통해서 expression간에 비교를 할 수 있다. 예를 들어, 객체 간의 주소를 비교하거..
[C++] Iterator, 반복자
2022. 9. 19. 12:39
C++
[C++] 범위기반 for 루프를 위한 클래스 템플릿 최소 구현 반복자를 증가시키는 operator++ 반복자를 역참조하고 반복자가 가리키는 값에 접근하는 operator* 다른 반복자와 비항등성을 비교하는 operator!= begin(), end() 함수 #include #include template class dummy_a.. entrypoint.tistory.com 이전에 이터레이터를 구현하는 글을 작성했었다. 이터레이터란 무엇이냐?, 이터레이터는 STL 컨테이너를 다루기 위한 일반화된 포인터이다. 이터레이터라는 개념없이, STL 컨테이너를 구현할 수 없다. 즉, 이터레이터는 곧 컨테이너이다. STL의 이터레이터는 기본적으로 다음의 연산을 지원한다. * 원소의 현재 위치를 반환한다. ==, !=..
[C++14] Virtual Inheritance
2022. 9. 18. 14:32
C++
다이아몬드 상속의 문제점은 상속의 모호성이다. 부모 클래스가 상속하는 메서드들이 중복된다면, 컴파일 에러를 일으킨다. 이에 대한 해결방안으로는 중복된 메서드를 제거함으로써 모호성을 제거하는 것이었지만, virtual 상속을 이용한다면, 메서드를 제거하지 않고도, 모호성 문제를 해결할 수 있다. class Hero{ public: virtual void SpecialMove() = 0; virtual void Attack(){ cout
[C++20] Concepts
2022. 9. 17. 19:13
C++
C++20에는 여러가지 개선사항이 추가되었다. 그중에서 concept를 소개하고자한다. 하지만 먼저, concept가 나온 배경이 무엇이지 알아보자. C++에는 Narrowing Conversion과 Integral Promotion이 있다. 데이터 전달과정에서 double이나 float형의 변수가 int형으로 Conversion이 일어나면, accuracy에서 손해를 봐야했으며, 반대로 bool 타입의 변수가 int로 Promotion이 일어나기도 했다. 이러한 문제로 인해서, 함수 템플릿을 작성할 때, 특정 타입에 대해서, 하나하나 Specilization 함수를 작성해야 했다. std::sort는 정렬 알고리즘이며, random access iterator를 사용하여 컨테이너의 원소들을 정렬한다. ..
값 카테고리, 타입 카테고리
2022. 7. 4. 13:54
C++
lvalue - value category Any object in C++ that is named by the programmer is lvalue. lvalue is intialized with rvalue. the programmer should concern about the life. In other words, the programmer should be careful of the ownership of lvalue. lvalue has its ownership. rvalue - value category the programmer never have a chance to name rvalue. rvalue is never initialized. It itself is a value. 3, 4..
Type Category Testing_2(형 카 검-컴포지트 타입)
2022. 7. 4. 12:36
C++
Trait Effect is_reference Lvalue 또는 rvalue 레퍼런스 is_member_pointer 비정적 맴버에대한 포인터 is_arithmetic 정수형(bool, 문자형 포함) 또는 부동소수점 타입 is_fundamental void, 정수형(bool, 문자형 포함) 또는 부동소수점, std::nullptr_t is_scalar 정수형(bool, 문자형 포함) 또는 부동소수점, 열거형, 포인터, 맴버 포인터, std::nullptr_t is_object void, 함수, 레퍼런스를 제외한 모든 타입 is_compound is_fundermental의 반대: 배열, 열거형, 공용체, 클래스 함수, 레퍼런스, 포인터, 맴버 포인터 std::is_member_pointer::value ..
Template 가이드라인
2022. 7. 4. 00:53
C++
Function Templates Function templates define a family of functions for different template arguments.(함수 템플릿은 다양한 템플릿 인자에 대한 함수군을 정의한다.) When you pass arguments to function paramters depending on template parameters, function templates deduce the template parameters to be instantiated for the corresponding parameter types.(템플릿 파라미터에 종속된 함수 파라미터에 인자를 전달하면, 함수 템플릿은 템플릿 파라미터를 연역한 후, 해당하는 타입으로 인스턴스화 ..