2012-03-24 8 views
0

私はC++でいくつかの行列クラスを書いていました。だから各行列は、エントリと呼ばれる配列へのポインタを持って、私はこの権利をしているかどうかはわかりませんが、私はサブクラスで配列を再宣言しています。 (私はC++の専門家ではありません)このコードにメモリがリークしていますか?私は何かを解放する必要がありますか? C++メモリ

このメモリはフリーズする必要がありますか?参照された配列でポインタを単に上書きするのですか?どんな助けでも大歓迎です。 おかげ

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

)(空でありますか? – user980058

+0

行と列を浮動小数点として定義するのはなぜですか? (C++はフラクタル次元の行列を扱うことができませんでした(;-) –

+0

ありがとう、私はそれを熱狂的に入力したことに気付かなかった –

答えて

6

は、コードがメモリをリークされていない、あなたは*どこでも、あなたのコード内のnewmallocを言うことはありませんので、おそらく、そうすることはできません、でもあなたは(つまり、外部の無防備な方法でそれを行う関数を呼び出しますRAIIオブジェクト)。

しかし、コードは(例えばMatrix4x4::entryある痕跡Matrix::entry、およびrowscolumnsを隠してはやや冗長な変数であるように見える)もかなり役に立たないと見当違いであり、それが唯一の良いCに座っによって解決することができ++数時間の本。

*)または、@Nicolボーラは親切失った円形の参照と共に、make_sharedを指摘したように

+0

それは私が 'strdup'を好きではない理由です。 +1 :) –

+0

@SethCarnegie:CやC++には「strdup」はありませんが、もちろん、「new」や「malloc」と呼ばれる関数は決して言いません。 Usorに警告する。 –

+0

@ダニー・バーチ:あなたがしようとしていることは分かっています。私はちょうどあなたがそれを正しく実行していない可能性が高いと指摘しました:-) –

関連する問題