2012-03-24 5 views
0

Also schrieb ich einige Matrix-Klassen in C++. Also hat jede Matrix einen Zeiger auf ein Array namens Einträge. Ich bin mir nicht sicher, ob ich das richtig mache, aber ich erkläre das Array in der Unterklasse neu. (Ich bin kein Experte in C++)Ist dieser Code undicht Speicher? Muss ich irgendetwas befreien? C++ Speicher

Muss dieser Speicher frei sein? Überschreibe ich einfach den Zeiger mit dem referenzierten Array? Jede Hilfe würde sehr geschätzt werden. Dank

class Matrix { 
protected: 
    float* entries; 
public: 
    int rows; 
    int cols; 


    Matrix() { 
    } 
    ~Matrix() { 
    } 
}; 

class Matrix4x4 : public Matrix { 
    protected: 
     float entry[4][4]; 
    public: 

    /* This will create an empty matrix */ 
    Matrix4x4() { 
     //Define the size of the arrays 
     rows = 4; 
     cols = 4; 
     this->empty(); 
    } 
    ... 
}; 
+0

wo leer ist()? – user980058

+0

Warum definieren Sie Zeilen und Spalten als Float? (C++ konnte nicht mit fraktal dimensionierten Matrizen umgehen ;-) –

+0

Danke, ich habe gar nicht gemerkt, dass ich das hastig tippte –

Antwort

6

Der Code ist nicht Speicher undicht und kann möglicherweise nicht so tun, da man nie new oder malloc überall in Ihrem Code * sagen, noch müssen Sie Funktionen aufrufen, die so in einem unbewachten Art und Weise zu tun (dh außerhalb RAII Objekte).

Allerdings ist der Code auch ziemlich nutzlos und fehlgeleitet (zB Matrix4x4::entry ist versteckt die rudimentäre Matrix::entry und rows und columns scheint etwas redundanten Variablen zu sein), und das kann nur durch Hinsetzen mit einem guten C gelöst werden ++ für ein paar Stunden buchen.

*) oder, wie @Nicol Bolas hat helfend darauf hingewiesen, make_shared zusammen mit einer verlorenen Kreisreferenz

+0

Und das ist der Grund, warum ich 'strdup' nicht mag, es macht deinen ersten Satz falsch +1 :) –

+0

@SethCarnegie: Es gibt kein "' strdup "" in C oder C++, aber natürlich hätte ich sagen sollen "du sagst oder nennst niemals irgendwelche Funktionen, die * new' oder' malloc' sagen. " Vorbehalt Usor. –

+0

@DannyBirch: Ich weiß, was du versuchst zu tun. Ich habe gerade festgestellt, dass Sie es wahrscheinlich nicht richtig machen :-) –