일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- 프로그래머스
- 1563
- directx
- C
- NRVO
- const
- winapi
- Unreal Engine5
- 오블완
- 티스토리챌린지
- DeferredRendering
- Frustum
- 2294
- algorithm
- RVO
- GeeksForGeeks
- DirectX11
- 줄 세우기
- IFileDialog
- UnrealEngine5
- Programmers
- UnrealEngine4
- C++
- baekjoon
- RootMotion
- 팰린드롬 만들기
- 백준
- 언리얼엔진5
- UE5
- softeer
- Today
- Total
목록C++ (42)
Game Develop
내 포트폴리오에 SafeDelete를 구현하면서 관련 글이 나와서 읽었는데, 알아두면 좋을것 같아 따로 적는다. 일반 단일객체야 그냥 Delete 쓰면 되고, 문제는 배열을 동적할당 받은것을 해제할 때다. int *t = new int[2]; delete t; // 에러 delete[] t; // Ok. t라는 변수는 그저 주소를 담고있는 포인터변수니까 delete t; 해도 괜찮지 않을까..하는 작은 의구심을 가지고 있을 수 있겠지만, 우리의 목표는 new int[2]로 할당된 힙메모리의 영역을 전부 해제시키는거다. 근데 그냥 delete t;만 하면 int 1개 정도의 메모리만 해제된다. 그리고 심지어 에러가 뜬다.. 메모리누수 관련된 에러인데 12바이트의 메모리누수에 대한 에러가 뜬다. 우리가 할당..

초기화리스트를 사용해야 하는 경우 2가지와 사용할 경우 이점을 설명해보겠다. 1. 클래스에서 상수형변수, 참조형변수를 멤버변수로 보유해야 할 경우. 상수형 변수와 참조형 변수는 둘 다 반드시 선언과 동시에 초기화를 시켜야 한다. 애초에 그렇게 하지 않으면 바로 에러가 나오기 때문에 컴파일도 못한다. 초기화리스트는 말 그대로 '초기화'이기 때문에, 생성자에서 원하는 값으로 초기화가 가능하다. 메인함수에서 인스턴스를 생성할 때 원하는 매개변수값으로 해당 인스턴스의 상수형변수, 참조형변수를 초기화시키는게 가능하다는 것이다. 아래의 예시를 보면 잘 되는걸 확인할 수 있다. 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 ..

이런 유형의 문제가 나올줄은 몰랐는데.. 정답은 C이다. 코드에 이 있어서 가독성이 좀 별로긴한데, 어쨌든 Test클래스 코드 끝에보면 a;라고 되어있는게 있다. 즉, 클래스를 정의함과 동시에 해당 클래스 인스턴스를 전역변수로 선언해놓은것이다. 그렇기 때문에 전역변수인 Test a의 생성자가 먼저 실행되고, 그다음 메인함수에 진입하여 cout

위 문제의 정답은 D이다. 왜일까? 아마 C라 생각한 사람도 있을 수 있다. 하지만 C++에서 Class는 기본적으로 따로 명시하지 않을 경우, 접근제한자는 private이다. (struct는 public) 그렇기 때문에 위의 Point클래스에서의 생성자는 private이고 main함수에서 저렇게 호출 할 수 없다. 그래서 당연히 컴파일단계에서 에러가난다. 위 문제의 정답은 C이다. t1은 저 선언만으로 스택에 Point만큼의 크기를 할당받았지만, t2는 그냥 객체의 주소를 담는 포인터변수일 뿐이다. 아마 C++문법이나 생성자호출에 대해 따로 공부하지않은 사람은 슬슬 헷갈릴 수도 있다. 위 문제의 정답은 C이다. 앞서 말했듯이, 포인터변수는 선언하더라도 생성자가 호출되지 않는다. new연산자를 통해 힙메..

복사생성자가 호출되는 경우를 고르는 문제이다. 이전문제와 같이 A,B,C,D가 전부 해당하기 때문에 정답은 E인 All of the above이다. 차례대로 보자면, A. 클래스의 객체가 값으로 리턴될 때 B. 클래스의 객체가 함수에 매개변수로 넘겨질 때 C. 같은 클래스의 다른 객체를 기반으로 객체를 생성할 때 D. 컴파일러가 임시 객체를 생성할 때 E. 전부 다 A같은 경우, 함수 내에서 Temp a; return a; 라는 구문을 실행할 경우 a라는 인스턴스는 함수가 끝날 때 같이 소멸하지만, a를 리턴받는 곳에서 a의 값을 이용해 복사생성한 객체를 받기 때문에 복사생성자가 호출된다. 참고로 A의 경우처럼 객체를 값으로 리턴할 때 RVO,NRVO라는 컴파일러 최적화 기법?이 있다. 일단 간단하게 말..

클래스 생성 시 따로 코드로 작성하지 않아도 디폴트로 추가되는 생성자,연산자 등을 선택하는 문제이다. A,B,C 모두 해당되기 때문에 정답은 D인 All of the above 이다. 아래의 예시코드를 보면, 클래스 생성과 변수 선언만 했을 뿐이지만 기본생성자,복사생성자,대입연산자 전부 잘 작동한다. 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 class Temp { public: int a = 0; }; int main() { Temp temp1; // A constructor without any parameter // OK. temp1.a = 20; Temp temp2(temp1); // Copy Constructor // OK. Temp temp3; ..
C++ 기본기를 다지기 위해 GeeksForGeeks 사이트에서 Quiz를 풀면서 알게된 기본 C++지식들을 정리하는 곳입니다. 간단하게 뭐는 뭐다..라고만 올리기도 하고, 모르는 문제가 있으면 해당문제 공부해서 올릴 예정입니다. https://www.geeksforgeeks.org/c-plus-plus-gq/constructors-gq/ Constructors in C++ - GeeksQuiz Quiz or mock test on constructors in C++. The quiz contains multiple choice and output of program questions for interview preparation. www.geeksforgeeks.org C++을 공부하는 분들은 한번쯤이..
Example 1. const키워드가 *앞에 선언될 경우 -> Heap에 락걸려있다는 느낌 int num1 = 4; int num2 = 61; const int* pNum = nullptr; pNum = &num1; // 정상적으로 수행 *pNum = 10; // Error const키워드가 *앞에 선언될 경우, 참조하는 값이 상수화된다. 그렇기때문에 pNum이라는 포인터변수의 값이 변경되는거는 상관없지만, 포인터가 가리키고있는 값의 변경에는 에러가 뜬다. Example 2. const키워드가 * 뒤에 선언될 경우 -> Stack에 락걸려있다는 느낌. int num1 = 4; int num2 = 61; int* const pNum = nullptr; pNum = &num1; // Error *pNum =..