티스토리 뷰
					공부/Effective C++
					
				항목 17 ] new로 생성한 객체를 스마트 포인터에 저장하는 코드는 별도의 한 문장으로 만들자.
-=HaeJuK=- 2010. 3. 8. 10:16728x90
    
    
  반응형
    
    
    
  new로 생성한 객체를 스마트 포인터에 저장하는 코드는 별도의 한 문장으로 만들자.
new를 사용하여 생성한 객체를 스마트 포인터등에 저장 할 때 단계가 많거나 복잡할 수 록 메모리 누수가 발생 할 수 있다.
예제 1
| 1 2 3 4 5 6 7 8 9 10 11 12 | //우선 순위를 알려 주는 함수 int priority(); //동적으로 할당한 Widget객체에 대해 어떤 운선순위에 따라 처리를 적용하는 함수     void processWidget(std:tr1::shared_ptr<Widget>pw, int priority); void main() {     processWidget(std:tr1::shared_ptr<Widget>(new Widget),priority()); }  | cs | 
어디서든 잘 쓰고 있는 자원 관리 객체를 쓰고 있지만, 이 문장은 자원을 흘릴 가능성이 있다. 
1. priority 호출 
2. new Widget 호출 
3. std::tr1:shared_ptr 생성자 호출 
자원을 흘리게 되는 이유는 각각의 연산이 실행되는 순서가 컴파일러 제작사마다 다르다는 게 문제이다 
new Widget을 먼저 실행하고 priority 호출 부분에서 예외가 발생한다면 tr1::shared_ptr에 저장되기도 전에 예외가 발생했으니 자원을 흘리게 된다.
해결 방법
| 1 2 3 4 5 6 7 | void main() {     std::tr1::shared_ptr<Widget> pw(new Widget);     //new로 생성한 객체를 스마트 포인터에 담는 코드를 하나의 독립적인 문장으로만든다.     processWidget(pw, priority());   //자원 누출 걱정이 없다. } | cs | 
Widget을 생성해서 스마트 포인터에 저장하는 코드를 별도의 문장 하나로 만들고, 
processWidget에 넘긴다. 
결론
new로 생성한 객체를 스마트 포인터로 넣는 코드는 별도의 한 문장으로 만들자
728x90
    
    
  
					댓글
						
					
					
					
				
			반응형
    
    
    
  
										공지사항
										
								
							
							
							
								최근에 올라온 글
								
							
							
								
									최근에 달린 댓글
									
							
							
								- Total
- Today
- Yesterday
									링크
									
							
							
								
									TAG
									
							
							
							- 서귀포
- 리눅스
- PowerShell
- 성산블루버블
- C#
- Build
- Thread
- OpenSource
- 제주도
- 블루버블다이빙팀
- Windows
- 양파다이브
- ReFS
- 서귀포블루버블
- RSA
- 다이빙
- 울릉도
- 현포다이브
- 블루버블
- Linux
- 패턴
- C
- 스쿠버다이빙
- 디자인패턴
- 암호화
- ip
- 블루버블다이브팀
- 윈도우
- C++
- DLL
| 일 | 월 | 화 | 수 | 목 | 금 | 토 | 
|---|---|---|---|---|---|---|
| 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 | 
									글 보관함
									
							
					