2017-01-02 4 views
0

Ich hoffe, mein Titel ist nicht irreführend, aber ich möchte etwas fragen, für das ich den richtigen Titel nicht kenne.Statische Member-Funktion für nicht statische Mitglieder

Zunächst frage ich nicht, ob ein nicht-statisches Element durch eine statische Funktion aufgerufen werden kann. Ich weiß, dass das nicht statische Mitglied zu einer Instanz eines Objekts gehört und dass die statische Funktion zu dem Objekt selbst gehört. Was ich gerne wissen möchte, ist etwas anderes.

Ich habe während meiner Masterarbeit ein Programm entwickelt, das einen hohen RAM-Verbrauch hat. Ich habe mich gefragt, warum, weil ich ständig Referenzen benutze und Variablen und Objekte nur dann kopiere, wenn es wirklich notwendig ist. Bei der Überprüfung der Speicherzuweisung habe ich jedoch festgestellt, dass meine Objekte jeweils 250 KB Speicher belegen und ich viele davon habe. Ich möchte diese Menge an Speicher reduzieren, indem ich nur instanziiere, was wirklich instanziiert werden muss.

Das Erstellen einer Instanz meines Objekts erstellt auch eine Instanz für jede Elementfunktion in meinem Objekt. Meine Frage ist jetzt:

Da die Funktionen nicht ändern, aber die Werte tun, kann ich eine Funktion als statisch deklarieren, so dass es nicht die ganze Zeit kopiert werden muss, kann aber noch Änderungen an den nicht durchführen -static Elementvariablen einer Instanz?

Ich hoffe, es ist klar, was ich verlange.

Um meinen Gedanken zu betonen, möchte ich ein kleines Beispiel geben.

Lassen Sie uns sagen, dass ich den folgenden Code

class myObject(){ 
    myType myVariable; 
    void getMyVariable(myType &typRef){ 
     typRef = this->myVariable; 
    } 
} 
int main(){ 
    myObject o1; 
    myObject o2; 

    myType t1; 
    myType t2; 

    o1.getMyVariable(t1); 
    o2.getMyVariable(t2); 

    std::cout << "Variable of object 1 is " << t1 << std::endl; 
    std::cout << "Variable of object 2 is " << t2 << std::endl; 
} 

Ich nenne die getMyVariable(myType &) Funktion zweimal haben. Es reicht jedoch aus, es einmal zu speichern, da ich für jede Instanz dasselbe mache. Das einzige, was sich ändert, ist die Variable, die ich zurückbekomme.

Gibt es ein Schlüsselwort in C++, das es erlaubt, eine Funktion auf statische Weise zu speichern, aber dynamisch die nicht statischen Elemente einer Instanz als austauschbare Werte für diese Funktion enthält.

Ich hoffe, es ist jetzt klarer, was ich suche.

+1

Sieht aus wie ein grundlegendes Missverständnis hat dich in die Irre geführt. In einem Objekt werden nur Mitgliedsvariablen gespeichert. Zeigen Sie uns die Mitgliedsvariablen. – molbdnilo

+2

Sie scheinen auch über Klassen, Objekte und Instanzen verwirrt zu sein. Eine Klasse ist ein Typ. Ein Objekt ist eine Instanz eines Typs. – molbdnilo

+0

Oh ok, scheint mir ein bisschen verwirrend, da ich nicht zu 100% mit der Terminologie vertraut bin. Ich wusste nicht, dass Funktionen nur einmal standardmäßig vorhanden sind, was gut ist, also muss ich mich nicht darum kümmern. Dank dafür. Das Überprüfen der Speicherzuweisung im Debug-Modus hat mir gezeigt, dass viel leerer Speicher zwischen meinen Mitgliedsvariablen gespeichert ist. Irgendeine Idee warum? – Bullzeye231

Antwort

4

Erstellen einer Instanz meines Objekts, erstellt auch eine Instanz für jede Elementfunktion in meinem Objekt.

Nein, tut es nicht. Funktionen existieren nur einmal in einem Teil des Speichers, der dem Code gewidmet ist, und sind in keiner Weise mit einzelnen Objekten verknüpft.

Gibt es ein Schlüsselwort in C++, das es erlaubt, eine Funktion auf statische Weise zu speichern, aber dynamisch die nicht statischen Mitglieder einer Instanz als austauschbare Werte für diese Funktion enthält.

Es gibt kein Schlüsselwort dafür in C++, da es standardmäßig passiert (und es gibt keinen Weg darum herum).

Wenn Ihre Objekte zu groß sind, liegt das daran, dass sie zu viele Daten speichern. Code ist nicht Teil des Datenlayouts eines Objekts und hat nicht beeinflussen seine Größe.

Verwandte Themen