본문 바로가기

분류 전체보기

(158)
c++ 상속 public, protected, private 완벽 정리 코드 public, protected, private 클래스 상속에 대한 완벽 정리를 기록용으로 코드로 적어 놓았다. 코드 >> 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 #include class Animal { public: void ..
c++ exception safety guarantee, exception 주의점, exception을 사용하지 말아야 하는 case Exception Safety guarantee에는 1. Basic Exception Safety 2. Strong Exception Safety 3. No-throw guarantee가 있다. Basic Exception Safety는 단순하게 exception 처리만 해준 것이다. exception이 발생했음에도 불구하고, 다른 변수가 변경될 수 있다. Strong Exception Safety는 Exception 처리로 다른 변수가 아예 변하지 않는다. No-throw guarantee 는 Exception 처리가 다른 함수로 넘어가지 않고, 원래 함수에서 끝나는 경우이다. 그리고 Swap, destructor, move에는 exception 처리를 하지 말자. 그리고 noexcept를 붙이도록 하..
c++ exception 정리 c++에서 exception을 처리함에 있어서 stack unwinding에 대해서 잘 알아야 한다 만약 c++에서 exception이 처리된다면 exception이 raise 되는 순간 함수가 stack에서 사라지며 catch 구문으로 옮겨지게 된다. 따라서 만약에 exception이 발생하는 코드 밑에 메모리 할당을 deallocation 하는 부분이 처리되지 않아서 메모리 leak이 발생할 수 있다. 따라서 스마트 포인터를 잘 사용해야 한다. 자세한 내용은 코드에 담아 두었다. 코드 >> 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43..
c++ Union, Variant Union은 메모리 세이빙에 좋다. 하지만 Union은 개발자가 신경써야 하는 부분이 많기 때문에 아주 조심히 사용해야 한다. 즉, std::variant를 쓰는 것이 안전하다 std::variant는 type tracking이 매번 type을 체크하기 때문에 내부적으로 type을 체크하는 변수가 들어간다. 따라서 overhead가 발생할 수 있다. 즉 std::variant는 하나의 공간 안에 다양한 타입을 안전하게 넣어줄 수 있다. 코드 >> 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52..
C++ enum class(매우 중요) 선택지가 제한된 타입에서는 무조건 Enum을 쓰자. 정답 : 1,2,3,4,5 같은 것들 말이다. 인자를 string이나 int 같은 것으로 받는 경우에는 버그가 생기기 쉽다. 코드 >> 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 #include // 인자를 string으로 받으면 버그가 발생하기 쉽다 // 따라서 enum을 사용하도록 하자 // 선택지가 객관식이라면 Enum을 사용하도록 하자 enum class Clothing_size{small, medium, large}; enum class Clothing_color{red, blue, yell..
c++ optional (C++17부터 지원) optional의 메모리 구조는 int num = 10; std::optional num1 = 20; 이라면 stack에 num = 20 말고도, valid or invalid가 따로 저장된다. 따라서 기본 int 보다 약간 사이즈가 더 크다. 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 #include #include std::optional d..
c++ tuple, pair tuple, pair 대신에 struct로 정의하는 것이 올바르다. 하지만 임시적으로 해당 기능을 잠깐 사용하고자 한다면 tuple이나 pair를 고려해 보자. 코드 >> 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 #include #include #include //pair나 tuple 보다는 struct를 만드는 것이 맞다. // 하지만 임시적으로 쓰인다면 pair나 tuple을 고려해 보자 std::pai..
c++ float 조심할 점 float은 정확한 값이 아니라 근사값이다. 예를 들어서 0.7f 가 정확한 0.7이 아니라 0.6999931414 이런 숫자일 수 있다. 따라서 == > 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 #include #include #include #include // float에서는 ==