Herzlich Willkommen, lieber Gast!
  Sie befinden sich hier:

  Forum » C / C++ (GNU/Linux, *NIX, *BSD und Co) » inline Methode und SO

Forum | Hilfe | Team | Links | Impressum | > Suche < | Mitglieder | Registrieren | Einloggen
  Quicklinks: MSDN-Online || STL || clib Reference Grundlagen || Literatur || E-Books || Zubehör || > F.A.Q. < || Downloads   

Autor Thread - Seiten: > 1 <
000
12.05.2008, 13:15 Uhr
FunnyDingo



Hallo zusammen,

wieder mal eine Frage. Folgendes sei gegeben:

C++:
classA::classA()
{
  classB *b = new classB(this);
  classC *c = new classC(this);
}


this wird in den Konstruktoren von classB und classC als a abgelegt. classC erstellt nun weitere Objekte irgendwelcher Klasse und diese müssen eine Funktion ausüfhren, die in classB liegt (classC kennt classB). Da ich die aber nicht direkt darauf zugreifen lasse möchte:

C++:
classC::classsC()
{
  classD *d = new classD(this);
  classE *e = new classE(this);
}
...
void classC::tuWasInClassB()
{
  a->b->tueDasHier();
}



Ich möchte das über diesen Weg machen, damit ich beim eventuellen austauschen von classB nur classB und nicht noch alle weiteren Klassen anpassen muss.

Macht es in diesem Fall Sinn tuWasinClassB als inline zu definieren? Vielleicht sollte ich noch erwähnen, dass die Funktionen die tuWasInClassB() aufrufen würden in einem SO liegen, ich bin mir nicht sicher ob das einfluss darauf haben müsste.

Gruß,
Funny
--
"Der Computer ist die logische Weiterentwicklung des Menschen: Intelligenz ohne Moral." (John James Osborne)

Meine Website: http://www.funnydingo.de
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
001
12.05.2008, 14:33 Uhr
0xdeadbeef
Gott
(Operator)


Ist die Frage, ob das so einfach geht. Prinzipiell ist die Funktion kurz genug, um inline sinnvoll erscheinen zu lassen, allerdings hast du da eine Konstruktion, in der viele Klassen verschränkt gegenseitig voneinander abhängen - dementsprechend musst du ein bisschen aufpassen, wer wann wovon die volle Definition kennt. Ich persönlich würde wahrscheinlich darauf verzichten, der Einfachheit halber.
--
Einfachheit ist Voraussetzung für Zuverlässigkeit.
-- Edsger Wybe Dijkstra
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
002
12.05.2008, 16:11 Uhr
FunnyDingo



Ich bin nun jetzt kein "Guru" aber IMO werden ohne Inline ja ca. 4 Maschinen Anweisungen daraus gemacht oder? Rücksprung-Adresse von d/e merken, zu tuWasInClassB springen, Rücksprung-Adresse merken und zu tueDasHier springen. Mit Inline würde sich das ja auch "nur" auf zwei Anweisungen reduzieren, oder?
--
"Der Computer ist die logische Weiterentwicklung des Menschen: Intelligenz ohne Moral." (John James Osborne)

Meine Website: http://www.funnydingo.de
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
003
12.05.2008, 16:41 Uhr
0xdeadbeef
Gott
(Operator)


Was der Compiler genau daraus macht, hängt vom Compiler ab - der C++-Standard definiert in Bezug auf das inline-Schlüsselwort hauptsächlich Linkage-Eigenschaften.

Wie dem auch sei, realistisch kannst du erwarten, dass der Unterschied zwischen einer Inline- und einer normalen Methode darin besteht, dass die Inline-Methode öfter in der Binary auftaucht (und sie dementsprechend vergrößert), und dafür beim Ausführen ein klein wenig Laufzeit einspart - nämlich das, was es normalerweise kostete, die Funktion aufzurufen. Verlassen kannst du dich darauf allerdings nicht, das inline-Schlüsselwort ist mehr so was wie eine Empfehlung.

Unter der Annahme, dass du den g++ benutzt, der hat eine Option -save-temps, die u.a. die Assembly-Zwischenergebnisse des Compilers aufbewahrt, darin kannst du das vergleichen. Ansonsten bietet sich gprof zur Laufzeitanalyse an. Von einem ganz praktischen Standpunkt aus gesehen würde ich mir darum allerdings nicht besonders viele Sorgen machen - Mikrooptimierungen bringen nur höchst selten einen merkbaren Unterschied, der Compiler beherrscht sie im Zweifel besser als du. Und wenn sich am Ende doch noch ein Flaschenhals auftut, ist am Ende, wenn er sich aufgetan hat, auch die beste Zeit, ihn wegzuoptimieren.
--
Einfachheit ist Voraussetzung für Zuverlässigkeit.
-- Edsger Wybe Dijkstra
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
004
12.05.2008, 16:50 Uhr
FunnyDingo



OK, danke ;-)
--
"Der Computer ist die logische Weiterentwicklung des Menschen: Intelligenz ohne Moral." (John James Osborne)

Meine Website: http://www.funnydingo.de
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
Seiten: > 1 <     [ C / C++ (GNU/Linux, *NIX, *BSD und Co) ]  


ThWBoard 2.73 FloSoft-Edition
© by Paul Baecher & Felix Gonschorek (www.thwboard.de)

Anpassungen des Forums
© by Flo-Soft (www.flo-soft.de)

Sie sind Besucher: