Notice
Recent Posts
Recent Comments
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
Tags
- UELOG
- stl
- unorder_map
- dataasset
- C++
- 정렬알고리즘
- UE_LOG
- 강참조
- 약참조
- moreeffectiveC++
- map
- C++최적화
- enumasByue
- 자료구조
- UML관련
- 정렬
- 델리게이트
- 애셋로드
- 알고리즘
- BFS
- 람다사용정렬
- 언리얼가비지컬렉터
- 언리얼엔진구조체
- 프로그래머스
- 크리티컬섹션
- 데이터애셋
- 선택정렬
- 람다
- UE4 커스텀로그
- 스마트포인터
Archives
- Today
- Total
기억을 위한 기록들
[CPP-effective] 5-1 변수 정의는 최대한 늦게하자 본문
예를 들어 어떤 함수안에서 어떤 변수를 선언해놓고 그 변수를 사용하기도전에 예기치 못한 상황으로 해당 함수를 탈출하게 되면 해당 변수는 사용해보지도 못하고 선언만 해놓고 다시 소멸하게 된다.
void DoSomething()
{
//..
Player tempPlayer;
if(/*어떤 상황으로 인한*/) //if안에 들어가면 tempPlayer는 생성과 소멸만하고 끝난다.
return; //탈출
//tempPlayer 객체의 사용
//..
}
이런것들은 위해 최대한 사용하기 직전에 변수를 정의하자.
void DoSomething()
{
//..
if(/*어떤 상황으로 인한*/)
return; //탈출
Player tempPlayer;
//tempPlayer 객체의 사용
//..
}
그리고 어떤 루프문을 돌때
A방법
Item myItem
for(int i=0;i<n;i++)
{
myItem= i;//i에 따라 뭔가 달라지는 값
//..
}
B방법
for(int i=0;i<n;i++)
{
Item myItem = i; //i에 따라 뭔가 달라지는 값
//..
}
두가지 방법이 있을때 걸리는 비용은
A방법 : 생성자 1번 + 소멸자 1번 + 대입 n번
B방법 : 생성자 n번 + 소멸자 n번
이렇게 차이가 있다. 사실 두개중에 정답은 없고
1. 대입이 생성자,소멸자 쌍보다 비용이 덜든다.
2. 전체 코드에서 수행 성능에 민감한 부분을 건드리는 중이다.
두가지다 아니라면, B방법이 맞고,
대입의 비용이 더 비싸면 A방법이 맞다.
정리
* 변수 정의는 늦츨 수 있을 때까지 늦추자. 프로그램이 더 깔끔해지고, 효율도 좋아진다.
'C & CPP > Effective C++' 카테고리의 다른 글
[CPP-effective] 5-2 형변환(캐스팅/casting)은 아끼고 아끼자. (0) | 2021.05.06 |
---|---|
[CPP-effective] 4-8 예외를 던지지 않는 swap에 대한 지원도 생각해보자. (0) | 2021.04.20 |
[CPP-effective] 4-7 타입 변환이 모든 매개변수에 대해... (0) | 2021.04.19 |
[CPP-effective] 4-6 멤버 함수보다는 비멤버 비프렌드 함수와 더 가까워지자. (0) | 2021.04.15 |
[CPP-effective] 4-5 데이터 멤버가 선언될 곳은 private 영역이라고 생각하자. (0) | 2021.04.15 |