>amma, en lille korrektion. this pointern eksisterer når konstructoren bliver kaldt og den peger på valid memory, men indholdet er ikke initialiseret. At bruge this i constructoren giver ikke "undefined results", at bruge det den peger på kan. Jeg har svært ved at se hvordan dit "fix" løser nogen problemer.
Der er nu en grund til at vc++ giver en warning omkring det her. Grunden til det er selvfølgelig at hvis TSettings' konstruktor begynder at bruge variabler fra TTest går det galt.
Nej, det giver ikke mening. Hvad sker der i dit eksempel hvis du bytter om på m_Testen & m_Settings i class'en? Eller bruger følgende: public: TTest2() : m_Testen(m_Settings), m_Settings(m_Testen) { } Så har du sansynligvis et problem => At bruge this i "intitializer list" er ikke et større problem.
Det er ikke første gang en kompiler giver ubrugelige warnings.
Jeg forstår ikke helt. Hvis du bytter om, bliver problemstillingen jo en anden! Det er ikke det, det originale spørgsmål omhandlede. Jeg har blot løst dette problem, som det bør løses.
Og nej, kompiler warnings er aldrig ubrugelige. Det er f.eks. mere end dårlig praksis at pragma warnings ud. -Eneste undtagelse er når compileren ikke understøtter alle features i C++ og derfor brokker sig. Fra og med MSVC++ 2003 er dette dog ikke noget problem.
Et lille eksempel der viser at man kan være nødt til at bruge this i initializer list: #include <iostream> class A { public: A(class B *owner) : MyOwner(owner) { } B * const MyOwner; };
class B { public: B() : a(this) {} A a; };
int main() { B b; }
Her er man nødt til at bruge en pragma for at disable den tåbelige warning.
bertelbrander, dit nye eksempel er en kopi af det originale spm. Min metode vil derfor også virke på dit nye eksempel. Brug en klasse, C, som proxy istedet for direkte som nu.
Hvorfor skal jeg ændre på mit design fordi nogen opfinder tåbelige warnings?
Synes godt om
Ny brugerNybegynder
Din løsning...
Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.