2011-01-12 5 views
3
Class1 myclass(someparameter); 

int main(int argc, char* argv[]) 
{ 
    myclass = Class1(anotherparameter); 
} 

파일 범위에 변수가 있습니다.이것은 나쁜 습관입니까? C++

나는 내 질문에 단어를 쓰는 방법을 모른다. 하지만 기본적으로 클래스를 복사하고 있는데이 코드는 꽤 펑키합니다. 이 일의 결과가 있습니까? 대신 new/delete을 사용해야합니까? 내가 생각할 수있는 잠재적 인 문제는 클래스에 포인터가 포함되어있는 경우입니다 (그러나 복사 생성자를 생성하여 해결할 수 있음).

+0

예, C++은 나쁜 습관입니다 ... 농담, 그냥 농담. 진정해, 친구. – JimDaniel

답변

1

클래스가 올바로 복사 할 수 있다고 가정하면 본질적으로 잘못된 것을 볼 수 없습니다. 그러나 myclass가 실제로 두 번 초기화되었으므로 효율적이지 않습니다. 한 번 선언 된 곳과 다른 인스턴스를 다시 할당 한 곳입니다.

논리가 필요한 경우 괜찮습니다. 그렇지 않으면 코드를보다 효율적으로 만들 수 있습니다.

0

요점은 무엇인지 명확하지 않지만, 수행 한 작업에는 아무런 문제가 없습니다. 때때로 이런 종류의 일은 조건부로 수행됩니다 - 예를 들어, 명령 행 인수가 변수의 대체 값을 지정하는 경우. new와 delete를 사용할 필요가 없습니다.이 경우 전역 변수 (operator= 사용)에 복사 될 임시 객체를 컴파일러에 생성하도록 요청하면 임시 변수가 삭제됩니다. 일반적으로 원하는 값으로 직접 변수를 직접 구성 할 때보 다 효율성이 약간 나쁘지만 조기 또는 불필요한 최적화가 필요하지 않습니다. 비교를 위해

는 생각이 더 많거나 적은 같은 일을하고

std::string sep = "\n"; 

int main(...) 
{ 
    if (...) 
     sep = std::string("\r\n"); 
} 

, 그 클래스는 operator=(const char*)이 일어나는로있는 임시 std::string의 명시적인 구조는 선택 사항입니다 비록 여기. 문제 없다.

2

나는 전역 변수가 일반적으로 바람직하지 않다고 말하고 싶다. 그렇다고 그들이 불법이거나 '나쁜 스타일'이라는 것을 의미하지는 않습니다. 나는이 특별한 경우에 전역 변수를 사용하지 않을 것입니다 ...

+0

오 ** ** 나쁜 스타일입니다. 왜 "싱글 톤"안티 패턴이 너무 싫어한다고 생각하니?) –

+0

@Matthieu M. 나는 강한 말을 피하려고 노력하고 있습니다 :) – a1ex07

관련 문제