일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- 언리얼 자기장
- Unreal Engine 4
- ue4 Crash
- tick 사용하지 않고
- 언리얼
- UnrealEngine
- 13iew
- deltaTime
- 랜덤 맵 생성
- Random Map Generator
- draw call skeletal mesh
- unity
- 채팅 서버
- Unreal Engine Error
- LittleNightMare
- Unreal Engine 5
- Unity Engine
- Ai
- UE5
- game ability system
- UE
- Chat Server
- tick처럼 사용
- multithreard chat
- 아이작 맵 생성
- unreal engine
- unreal engine 5 merge mesh
- bluezone
- ue4 error
- UE4
- Today
- Total
Class GameDev* SheepAdult
[C++] 복사 생성자 본문
복사 생성자는 언제 호출되는가? 기본적으로 대입 연산자(ex. =)를 사용하여 복사를 할 때 생성된다. 이는 기존에 생성된 객체를 이용해 새로운 객체를 초기화한 경우이다. 이뿐만 아니라 참조가 아닌 복사 방식인 Call-by-value방식에서 함수 호출 시 객체를 인자로 전달하는 경우, 그리고 객체를 참조형으로 반환하지 않는 경우에도 복사 생성자가 호출된다.
함수의 매개변수가 참조자가 아닌 경우 복사가 일어난다. 인자를 매개변수에 대입하는 과정에서 발생한다. 그리고 return으로 반환 시 해당 return 값에도 복사 생성자를 통한 복사가 일어난다. 일반적으로 함수가 종료되면 안에서 선언된 변수나 객체는 소멸되는데 반환되는 객체는 '임시 객체'로써 일단 소멸되지 않는다.
아래와 같이 클래스와 함수가 있다.
class Practice
{
public:
Practice()
{
cout << "Default Constructor" << '\n';
}
Practice(const Practice& copy)
{
cout << "Copy Constructor" << '\n';
}
~Practice()
{
cout << "Destruct" << '\n';
}
};
Practice PracticeFunction(Practice p)
{
cout << "Practice!" << '\n';
return p;
}
int main()
{
Practice p1; // (1)
PracticeFunction(p1); // (2)
Practice p2 = PracticeFunction(p1); // (3)
cout << "End..." << '\n'; // (4)
return 0; //(5)
}
출력결과는 아래와 같다.
a : (1)에서 p1이 생성되어 기본 생성자가 호출된다.
b : 그 후 (2)에서 매개변수에 대한 복사 생성자가 호출되고
c : 해당 함수의 내용을 출력한 뒤
d : 반환 값에 대하여 다시 한번 복사 생성자를 호출한다.
e, f: 그리고 함수를 종료하므로 매개변수 객체, return에서 생성된 객체는 소멸된다.
g : 그리고 (3)에서 p1이 인자로 생성된 객체에 복사된다.
h : 함수의 내용을 호출한 뒤
i : return에 의해 객체가 한 번 더 생성된다.
j : 하지만 임시 객체로써 아직 i의 객체는 살아있고 g의 객체는 소멸된다.
k : end가 출력되고,
l, m : 임시 객체가 소멸되고 이어서 p1도 소멸된다.
'C++' 카테고리의 다른 글
Multi Thread를 활용한 간단한 1:N 채팅 서버 (0) | 2023.12.30 |
---|