| 일 | 월 | 화 | 수 | 목 | 금 | 토 |
|---|---|---|---|---|---|---|
| 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 |
- 백준
- UnrealEngine4
- UnrealEngine5
- IFileDialog
- RootMotion
- 언리얼엔진5
- 오블완
- 티스토리챌린지
- UE5
- DirectX11
- GeeksForGeeks
- C
- softeer
- const
- algorithm
- Programmers
- 프로그래머스
- 팰린드롬 만들기
- C++
- directx
- Effective C++
- RVO
- 줄 세우기
- TObjectPtr
- baekjoon
- 2294
- winapi
- 1563
- Unreal Engine5
- NRVO
- Today
- Total
목록C++ (47)
Game Develop
참조자로 전달하는게 대개 나은 이유중 대표적인 이유가, 값에 의한 전달을 하면 복사비용이 크기 때문이다.아마 이정도는 조금이라도 C++을 공부한 분들이시라면 꽤나 잘 알려진 내용이다.매개변수로 전달되는 객체를 읽기전용으로 쓸거면 안전하게 const까지 붙여서 전달받는게 베스트이다. 그리고 책을 보면 참조자로 전달해야만 하는 케이스가 또 있는데, 사실 많이 발생하는 이슈일 것 같진 않지만 이런쪽으로 생각 해 본적은 없었어서 한번 남겨본다. 대충 Parent와 Parent를 상속받는 Child가 있다고 가정하고... bool Validate(Parent p); 라는 함수도 있다고 가정하자. 그리고 특정함수에서 아래와 같은 코드를 작성해보자. Child c;Validate(c); 자 여기엔 무슨 문제가 있..
객체를 복사해야 하는 경우(복사생성이나 대입연산), 말 그대로 모든 부분을 빠짐없이 복사해야 한다. 상속관계인 두 클래스가 있을 때, 자식클래스에서 복사생성을 정의할 경우 부모클래스의 복사생성은 호출되지 않는다.물론 따로 정의 안하면, 기본컴파일러가 부모것까지 얕은복사를 해준다. 자 그러면 여기서 자식클래스에서 복사생성자랑 대입연산자를 정의해보자. 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970#include iostream>#include string> using namespace std; class Paren..
여기서 말하는 자기대입(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인 이유는 객체지향적인 이유중 은닉성때문인 것 같다.