2013-07-20 2 views
1
class A{ 
public: 
    class A() : var1(0) 
    {} 
    virtual ~A(){}; 
    virtual void DoMagic() = 0; 
protected: 
    int var1; 
}; 

나는 -O 최적화에 몇 가지 문제가 있습니다. gcc. 그런 다음 최적화없이 프로그램이 잘 실행되지만 수준에 관계없이 무작위로 충돌합니다.추상 클래스의 보호 된 멤버 변수는 무엇입니까?

나는 위에서 보인 것처럼 보호 된 멤버 변수를 가진 몇 개의 abstract 클래스를 가지고있다. 이 변수는 파생 된 클래스에서 활발하게 사용됩니다. 이것이 관련 될 수 있습니까?

Scott Meyers가이 관행에 대해 조언하고 있다고 들었지만 참조 텍스트를 찾을 수 없습니다.

문제의 원인 일 수 있습니까? 유효한 C++입니까?

감사합니다.

+0

최상의 디자인이 아닐 수도 있지만 이는 유효한 C++이며 사용자가 설명하는 종류의 문제를 유발할 수는 없습니다. 당신의 문제는 다른 곳에 있습니다. –

+0

생성자에서 var1을 초기화 했습니까? 코드가 유효하지 않습니다. DoMagic은 가상이 아닙니다. – billz

+0

예, class1의 초기화 목록에서 var1을 초기화합니다. – nahpr

답변

1

나는 귀하의 문제가 다른 곳에있을 수 있다고 생각합니다.

변경 :

void DoMagic() = 0; 

에 :

virtual void DoMagic() = 0; 

는 또한 가상 소멸자를 가지고 있는지 확인하십시오.

virtual ~A() { } 

파생 될 때 사용하기 전에 파생 생성자에서 var1을 초기화해야합니다.

B::B() : var1(0) { } 

디자인의 경우 문맥을 알지 못하는 경우도 있지만 어떤 경우에는 괜찮습니다.하지만 피하려고합니다.

관련 문제