Sry, dass ich so blöd frage, aber was bringt es eine Funktion const zu machen? Also wo du hinter die Funktionsdeklaration einfach const geschrieben hast? Hab das nämlich noch nie gesehen
Das bedeutet, dass die Funktion das Objekt nicht verändern darf. Das ist sinnvoll, wenn du ein const Objekt hast dessen Funktionen du aufrufen willst. Wenn du versuchst eine nicht-const Funktion von einem const Objekt aufzurufen bekommst du einen Compilerfehler.
Beispiel:
|
C-/C++-Quelltext
|
1
2
3
4
5
6
7
8
9
10
|
class A
{
public:
int returnTruth() { return 42; }
};
bool checkTruth(const A& a)
{
return a.returnTruth() == 42; // Fehler, da a const ist, aber returnTruth nicht.
}
|
Für eine ausführlichere Erklärung zum Thema const-correctness kannst du dir mal
das hier durchlesen.
Hier ist der Abschnitt zu const Methoden.
Und String gilt tatsächlich als größeres Objekt? Also sollte man quasi alles außer den Standard-Datentypen per Referenz oder Zeiger übergeben?
Ja, so ziemlich, es sei denn du hast einen guten Grund eine Kopie zu erstellen, z.B. wenn du eine Variable im Scope deiner Funktion verändern willst.
Objekte sollten soweit möglich auf dem Stack leben bedeutet, dass ich die Sprites nicht als Zeiger erzeuge [...] ist das richtig?
Richtig. Du darfst dann natürlich auch nicht mehr new verwenden, da das Objekt ja bereits erzeugt wurde.
Also was genau ist daran jetzt verkehrt, weil ich gerade versucht bin das einfach so zu lassen, denn es funktioniert ja scheinbar nicht so wie ich es oben beschrieben habe
Weil Objekte auf dem Stack automatisch aufgeräumt werden. Dadurch kann es nicht passieren, dass man versehentlich irgendwo vergisst wieder was freizugeben. Außerdem ist der Stack schneller. In
diesem Stackoverflow post wird das ganze nochmal etwas genauer erklärt.
Wenn du Segfaults bekommst, musst du halt die entsprechenden Stellen suchen (evtl. mit Debugger) und fixen. Da ich deinen Code nicht kenne, kann ich dir da auch nicht viel weiterhelfen.