| 일 | 월 | 화 | 수 | 목 | 금 | 토 |
|---|---|---|---|---|---|---|
| 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 |
- RVO
- 프로그래머스
- 팰린드롬 만들기
- baekjoon
- winapi
- algorithm
- Effective C++
- softeer
- GeeksForGeeks
- 2294
- UnrealEngine4
- Programmers
- IFileDialog
- C
- const
- TObjectPtr
- UE5
- Unreal Engine5
- directx
- 오블완
- NRVO
- C++
- DirectX11
- 백준
- 줄 세우기
- 언리얼엔진5
- 1563
- RootMotion
- UnrealEngine5
- 티스토리챌린지
- Today
- Total
목록C++ (45)
Game Develop
여기서 말하는 자기대입(self assignment)란, 어떤 객체가 자기 자신에 대해 대입연산자를 적용하는 것을 의미한다.대충 아래처럼? Widget w;w = w; 이게 왜 위험한가... 아래의 예시코드를 먼저 보자. 123456789101112131415161718 class Bitmap {}; class Widget{ public: Widget& operator= (const Widget& rhs) { delete pb; pb = new Bitmap(*rhs.pb); return *this; } private: Bitmap* pb;};Colored by Color Scriptercs 위의 예시코드는 안전하지 않은 대입연산자 코드이다.왜..
사실 Effective C++이라는 카테고리를 따로 걸어서 뭔가 올리고 있긴 한데, 다른 내 글들과 마찬가지로 사실상 숙지용? 글에 가깝다.책처럼 보기 좋게 쓰여진다기 보다는, 공부하다 혼잣말 하는 느낌의 글이라 생각한다.어차피 Effective 시리즈 관련 정리 글은 다른 분들이 잘 정리해서 올려주신게 많기 때문에... === === === === === === === === === === === === === === === === === === === === === === === === === === 부모와 자식클래스가 있고, 부모클래스에서 Test() 라는 가상함수를 선언했다고 가정해보자.그리고 자식에서는 그 가상함수를 오버라이드해서 뭐 이것저것 작성했고.그다음 이 가상함수를 부모의 생성자에서 ..
어떤 객체의 인스턴스한테 유일성을 보장해주고싶을 때가 있다고 가정해보자.그러면 인스턴스를 만들면 그것과 동일한게 있으면 안되니 복사생성자나 복사대입연산자를 허용하면 안된다. 이럴 때 먼저 가장 손쉬운방법은 복사생성자나 복사대입연산자를 private으로 선언해버리는 것이다.private이니 외부에서 호출할 수 없게 만들어버렸다는 느낌이다. 하지만 이 방법은 100% 완벽하지 않다.왜냐면 클래스의 멤버함수나 프렌드함수에서 해당 복사생성자나 복사대입연산자를 호출해버릴수도 있기 때문이다. 멤버함수에서의 호출까지 막을려면 그냥 복사생성자, 복사대입연산자를 '선언'만 하는 것이다.실제로 이 방법은 C++의 iostream 라이브러리의 몇몇 클래스에서 실제로 적용한 복사방지법이라고 하니, 필요할 때 써먹어도 될 것 ..
제목을 다시 바꿔말하면.. 멤버 초기화 리스트를 사용해 멤버변수들을 초기화하자. C++규칙에 의하면 어떤 객체이든 그 객체의데이터 멤버는 '생성자의 본문'이 실행되기 전에 초기화되어야 한다고 명시되어있다. Foo::Foo(const string& name, const int count) { this->m_Name = name; this->m_Count = count; } 위 코드에서 멤버변수들은 초기화되었는가? 아니다. '생성자의 본문'이 실행되기 전에 초기화 되어야 한다고 되어있는데, 위 코드는 본문에서 멤버변수에 '대입'을 했을 뿐이다. 그리고 좀 더 정확히는 저 대입연산을 하기전에 멤버변수들의 기본생성자들이 호출되어서 값을 초기화했을 것이다.근데 m_C..
https://dobby-the-house-elf.tistory.com/358 [C++] 구조체의 크기 (size of struct) 구조체의 크기는 구조체를 구성하는 요소들에 의해 정해 집니다. 하지만 크기를 출력해보면 예상한 값과 다르게 나올때가 있는데, 그 이유와 구조체의 구조에 대해 알아보겠습니다. struct Packet00 dobby-the-house-elf.tistory.com 친절한 설명은 이미지가 포함되어있는 위 글에서.. 기본적으로, 최종 크기는 가장 큰 데이터타입의 배수이다. 기본적으로 여러데이터타입이 있을 경우, 가장 큰 것을 기준으로 한다. 그렇다고 가장큰 것 * 변수개수가 아니다! 각각 데이터크기 1, 2, 4 (char, short, int) 가 있으면 ‘일단’ 할당받을 메모리..
공통점?: 선언부부분에 바로 정의하면은 인라인으로 처리된다. 기본접근자. 클래스는 private, 구조체는 public이다. 왜그럴까? -> c는 원래 구조체를 썼었고, 접근지정자란 개념이 없었다. 즉 모두 public이란 뜻. 근데 c++에서 갑자기 기본접근지정자는 private으로 하면 c프로그램을 컴파일하려할 경우 코드를 다 다시 짜야할 것이다. 그래서 기본을 public으로 해놓는것. 클래스가 private인 이유는 객체지향적인 이유중 은닉성때문인 것 같다.
함수호출에 관한 최적화 기법으로 Tail Call Optimization, Tail Recursive Elimination이라는것이 있다. 글마다 뭔가 조금씩 차이가 있는것 같긴한데, 기본적인 이해를 위해 잘 정리된 글들이 있어 먼저 소개한다. https://tiger1710.tistory.com/56 Tail Call Recursion Tail Call Recursion제가 이번에 설명할 것은 제가 검색하다가 발견한! Tail Call Recursion 이라는 새로운 재귀?적인 방법의 코딩입니다. 기존의 재귀함수와 비교하면서 설명하도록 하겠습니다.IDE : Visual S tiger1710.tistory.com https://hongjw1938.tistory.com/192 알고리즘 - Quick(퀵) ..
원래는 막연히 그냥 quickSort를 메인으로 좀 더 개선한 알고리즘으로 정렬한다... 라고만 알고 있었다. 그러다 좀 더 자세한 정보들을 접하게 되면서 글로 남겨본다. 본 글은 아래 링크의 글을 정리한 내용이다. https://www.geeksforgeeks.org/introsort-cs-sorting-weapon/ Introsort - C++’s Sorting Weapon - GeeksforGeeks A Computer Science portal for geeks. It contains well written, well thought and well explained computer science and programming articles, quizzes and practice/competitiv..