2014-12-31 2 views
0

새로운 Linux 배포판 (check it out as soon as I finish)에 대한 간단한 패키지 관리자를 빌드 중이며 문제가 발생했습니다. 내 install()remove() 함수는 Package 개체의 지정되지 않은 양에 액세스해야합니다. 이것은 설치 기능입니다.C++에서 같은 이름의 여러 객체 피하기

void install(int argc, char *argv[]) throw() 
{ 
     for (int i = 2; i <= argc; i++) 
     { 
       Package p(argv[i]); 
       p.fetch(); 
       cout << "Package " << p.getRef() << " retrieved succesfully from server.\n"; 
       p.install(); 
       cout << "Package " << p.getRef() << " installed succesfully.\n"; 
     } 
} 

이 코드가 완전히 정결하지 않은 것으로 판단됩니다. 이로 인해 컴파일 및/또는 런타임 오류가 발생할 수있는 p이라는 여러 객체가 생성됩니다. 내가 찾고있는 중 루프의 각 반복에서 p 이름을 변경하거나 하나의 반복 후 p을 삭제하는 방법 중 하나입니다 그래서 그 이름의 다른 개체를 만들 자유롭게 될 것입니다.

+4

C++에 대한 좋은 책을 읽어야합니다. 특히 범위 지정 규칙에 대해 알아야합니다. 변수'p'는 루프 내부에서 국부적으로 선언됩니다. 루프가 반복 될 때마다 새롭고 고유 한 객체가 만들어집니다. –

+1

** 좋은 책 : ** https://stackoverflow.com/questions/388242/the-definitive-c-book-guide-and-list – Galik

답변

2

코드에 식별 할 수있는 문제가 없으며 여러 개체에 문제가 없습니다. 변수 p은 자동 storage duration이고 scope을 벗어나면 파괴됩니다. 이것이 의미 할 때 for 루프의 각 반복 끝에 p이 파괴되어 더 이상 존재하지 않습니다.

+0

개체가 루프 전체에 존재한다고 생각했습니다. 나는 각 반복에서 내용이 파괴되었다는 것을 깨닫지 못했습니다. –

+0

아니요. 자동 저장 기간이 있기 때문에 수명이 _scope_에 정의되어 있습니다.이 경우'p '의 유효 기간은'for' 문 다음에 오는 _compound 문 _에 의해 정의됩니다. –

관련 문제