2012-12-07 2 views
1

프로젝트의 중첩 된 하위 폴더에 꽤 많은 소스 파일이 있습니다. 나는 대체하려고하는 4 가지 클래스를 가지며 할당 된 소스 (힙 + 스택)의 모든 위치를 찾으려고합니다.메모리 할당을 찾기위한 Regex/grep/findstr C++

불행히도 빈약 한 포함 구조로 인해 Visual Studio의 "전체 솔루션 검색"기능을 신뢰할 수 없으므로 소스 파일 내에서 수동 검색을 사용했습니다.

"new CLASS1(" 힙에 대한이 세 가지 토큰 내가 클래스 이름은 행의 시작 부분에서 시작 말을하려고 해요 "^CLASS2" (제외 공간 사이 공간의 조합 : 나는 믿고 무엇

충분하다) 스택 할당.

스택 할당의 경우 [^a-zA-Z] CLASS3 [a-zA-Z]+이 시도되었지만 정규 표현식에 익숙하지 않아서 SO를 실행하려고했습니다. 힙에 대해서는 위의 문자열을 시도했지만 단순한 여분의 간격으로 패턴이 깨져서 잘못된 것으로 알고 있습니다.

누구나 더 좋은 matcher 또는 문제를 해결하는 훨씬 더 좋은 방법을 생각해 낼 수 있습니까?

AK

+2

세번째 것은 의미가 없으며, 모두 템플릿이나 typedef가있는 상태에서 실패합니다. 내 솔루션은 모든 클래스의 이름을 바꾸는 것이고 컴파일러 오류는 사용 된 위치를 보여줍니다. –

+0

@MooingDuck 예, 왜 CLASS3 이전의 공백 문자가 아닌지 잘 모르겠지만 임의로 추측하지 않았 으면합니다. 이러한 클래스에 대해 선언 된 템플릿이나 typedef는 없으며 상속 유형 문제도 없습니다. 나는 수업을 개명하는 것에 대해 정말로 생각해 보았습니다. 그러나 이것들은 매우 중요하며 어디에서나 사용됩니다. 거의 모든 줄 바꿈을하지 않습니다 (심지어 할당되지 않은 줄? - 클래스, 구조체, 공용체는 전에 -> 등으로 예상 했습니까?) –

+1

예.하지만이를 대체하는 경우 _first_ 오류는 항상 코드 조각이됩니다 너는 변해야 해.(또한 아마 당신은 회원을 찾고 싶을 것이다. 그러나 당신의 "스택 할당"정규식은 아마 그것을 고를 것이다) –

답변

2

생성자를 비공개로 설정하면 개체를 만들 때마다 오류 메시지가 표시됩니다.

개인용 new() 연산자로 힙 할당과 동일한 트릭을 수행하십시오.

편집 : 클래스 구현 (정적 메소드 포함) 내부에 자체 인스턴스를 만드는 것을주의하십시오. 그러한 컨텍스트로부터 private 생성자를 호출하는 것은 유효하며 오류를 트리거하지 않습니다. 또한 친구 클래스/기능을 조심하십시오.

+0

AHA! 이것은 유망하게 들린다! 이 모든 인스턴스를 잡을 수 있는지 다른 사람이 확인할 수 있습니까? –

+0

사실 모든 생성자를 비공개로 만들면 (3 개의 기본 구성자를 포함하여) 새 인스턴스를 만드는 친구 함수가없는 한 완벽해야합니다. 실제로'new'를 비공개로 만들 필요는 없습니다. 실제로는 아무것도 도움이되지 않습니다. –

+2

@MooingDuck :'new()'에 대한 조언은 동적 할당을 선택적으로 막기 위해'operator new'와'operator new []'의 액세스 제어를 사용하는 아이디어가 왜곡 된 것이라고 생각합니다. 같은 맥락에서 소멸자에 대한 제한된 액세스는 비 동적 할당을 선택적으로 방지하는 데 사용될 수 있습니다. 생성자에 대한 액세스를 제한하면 두 경우를 구분할 수있는 권한이 없습니다. –

2

하나에게, 당신은 클래스의 모든 사용은 단순히 클래스의 정의를 제거하거나 몇 가지 주요 부분은 무효 확인하는 것입니다 제거 할 수 있도록 보장 방법을 주셔서 감사합니다. 그런 다음 프로젝트를 컴파일 할 때 클래스가 사용되는 모든 상황에 대해 오류가 발생합니다. 모든 것이 성공적으로 컴파일되면 모든 것이 대체되었음을 알 수 있습니다.

간단한 케이스의 경우 찾기/바꾸기를 사용하여 조금 더 빠르게 할 수 있으며 나머지 케이스는 수동으로 수정합니다.

+1

+1 (비록 사소한 상식이라 할지라도). –

관련 문제