Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
Tags
- Frustum
- 팰린드롬 만들기
- directx
- UE5
- baekjoon
- softeer
- algorithm
- 1563
- DeferredRendering
- C++
- 언리얼엔진5
- RVO
- 프로그래머스
- const
- UnrealEngine5
- C
- GeeksForGeeks
- UnrealEngine4
- Unreal Engine5
- DirectX11
- IFileDialog
- Programmers
- 오블완
- NRVO
- RootMotion
- 백준
- 티스토리챌린지
- 줄 세우기
- 2294
- winapi
Archives
- Today
- Total
Game Develop
클래스 생성 시, 따로 작성하지 않아도 자동으로 추가되는 것은? 본문
클래스 생성 시 따로 코드로 작성하지 않아도 디폴트로 추가되는 생성자,연산자 등을 선택하는 문제이다.
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;
temp3 = temp1; // Assignment Operator // OK.
cout << "Temp1.a : " << temp1.a << endl;
cout << "Temp2.a : " << temp2.a << endl;
cout << "Temp3.a : " << temp3.a << endl;
}
|
cs |
기본생성자같은 경우, 따로 작성하지 않더라도 컴파일러가 기본생성자를 만들어 준다.
주의할 점은 클래스에 다른 생성자(매개변수를 받는 생성자 등)가 하나라도 작성되어 있을 경우, 컴파일러는 기본생성자를 만들어 주지 않는다.
컴파일러가 자동으로 생성하는 복사생성자는 모든 멤버변수를 '복사' 한다.
그러면 멤버변수가 포인터변수일 경우, 주소값만 그대로 복사하기 때문에 복사한 객체, 복사당한 인스턴스클래스객체 둘 다 같은 주소값을 가지고 있는 멤버변수를 보유하게 된다.
그러면 같은 힙메모리에 있는 데이터를 가리키게 되기 때문에 의도하지 않은 결과를 도출하게 된다. (얕은복사)
그래서 힙메모리의 데이터를 복사생성하려는 의도일 경우, 복사생성자를 따로 작성해준다.
좀 더 자세한 글은 아래링크에 정리했다.
https://maxlevel-trace.tistory.com/15?category=805943
대입연산자.
https://maxlevel-trace.tistory.com/16?category=805943
'C++ > GeeksForGeeks Quiz' 카테고리의 다른 글
간단한 문제들 3 (0) | 2022.07.14 |
---|---|
간단한 여러 문제들 2 (0) | 2022.07.09 |
간단한 여러 문제들 1 (0) | 2022.07.07 |
복사생성자는 언제 호출되는가? (0) | 2022.07.07 |
GeeksForGeeks 문제 정리. (0) | 2022.07.06 |