C (101) 썸네일형 리스트형 c++ lambda expression, capture =, & c++ 에서 lambda expression은 javascript에서 closure를 사용하는 것 과 같다. 그리고 lambda expression을 클래스로 만들 수도 있는데 사실 클래스나 lambda expression은 assembly 언어로 변환하면 동치이다. 그리고 lambda expression에서 capture가 중요한데, 이게 javascript에서 closure 기능을 수행하게 하는 변수이다. [=]을 사용하면 capture by value라 deepcopy가 일어난다 [&]을 사용하면 capture by reference이다. 코드 >> 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 .. c++ weak pointer 정리 weak pointer의 사용 례를 코드로 정리해본다. 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 #include #include /// /// weak pointer는 cyclic dependency between shared_ptr /// 을 다루는 데 좋다. /// /// /// int main() { auto sharedPtr = std::make_shared(100); std::weak_ptr weakPtr(sharedPtr); std::cout c++ heap 메모리 생성, 해제, unique_ptr, shared_ptr unique ptr은 exclusive ownership을 보장함. c++ heap 메모리 생성, 해제 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 #include #include #include class Cat { public: explicit Cat(int age) :mAge{ age } { std::cout c++ const, explicit const는 붙일 수 있다면 무조건 붙이자. explicit도 붙일 수 있다면 무조건 붙이자(형 강제) friend는 oop를 해치므로 웬만하면 쓰지 말자. 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 #include #include // Frined는 웬만하면 쓰지 말자 // Const와 explicit은 붙일 수 있으면 무조건 붙이자 class Cat { public: // 무조건 explicit하게 name과 age를 넣어줘야 함 explicit Cat(std::str.. c++ class function overloading, 연산자(operator) 임의 지정 연산자 operator, function overloading은 매우 중요하다. 특히 operator는 stl과 결합하여 아주 강력한 코딩을 만들 수 있다. 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 101 102 103 #inclu.. C++ class copy move constructor, instructor class 내부에서 포인터로 heap을 조작하고자 하는 경우에는 개발자가 직접 copy constructor, move constructor를 활용해서 직접 구현해야 함. 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 101 #inclu.. static function, static variable static variable은 object가 생성되었을때 object들이 stack 공간에 저장되는 반면에 static은 static 이라는 별도의 메모리에 저장 된다. 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 #include #include class Cat // 메모리를 32byte의 배수로 만든다 { public: void speak() { count++; static int static_count = 0; // Static variable in a function... // 더 안전함 static_coun.. c++ object memory alignment 1l cache memory 등을 고려하여 코드를 짜야 한다. 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 #include #include class alignas(32) Cat // 메모리를 32byte의 배수로 만든다 { public: void speak(); private: // 위치에 따라 class 크기가 다름 // 가장 큰 변수의 배수에서 메모리 할당이 끝나야 한다 // 따라서 24byte 나올 수 있음 // char를 늘려도 더 올라감 char c1; int i4a; double d8; int i4b; }; Cat staticCat; .. 이전 1 ··· 7 8 9 10 11 12 13 다음