1

与えられた:

Class A
{
     private:
       double **CR;
     public:
       double **compute2D();
};

プライベート 2D Array メンバーがあるとします。

double **CR;

そして、私はメンバー関数を持っています:

Double ** Compute2D()

関数computer2Dは を返しCRます。

これは悪い習慣ですか?なんで?ゲッター関数とセッター関数を使用して返す必要がありますか?

もう 1 つの質問: ガベージ コレクターを正しく使用していますか?

A::~A()
{
    //Delete 2D array
    for(int i = 0; i < Rows; ++i)
    {
        delete [] CR[i];
    }

    delete [] CR;
}
4

6 に答える 6

1
  1. 書き込みアクセスでプライベート変数を返しているので悪いです。おそらくそれほどプライベートではありません
  2. ポインターを返すのは悪いことです。この場合、メモリを解放する責任があるのは誰なのか明確ではありません。クラスは独自のメンバーであるため、それともユーザーはメソッドを呼び出すためですか?
于 2013-07-29T13:03:45.617 に答える
1

これにより、クラス外でプライベート メンバーの値を変更できるようになります。それが悪いか良いかはあなた次第です。しかし、私の意見では、プライベート メンバーがいる場合、その値を変更できるのは私だけである必要があります。

于 2013-07-29T12:58:49.530 に答える
1

カプセル化を壊す可能性があるため、クラスのプライベート メンバーへのポインターを返すのは良くありません。
クラスに通知せずに、誰かがプライベート変数の値を変更できるようになります。ただし、クラスのフィールドのコピーを返すことには何も悪いことはありません。ゲッターとセッターを使用する場合、クラスが認識しない限りクラスの状態を変更する方法はありません。それは良い練習です。

アレイを削除すると、すべて問題ないように見えます。

于 2013-07-29T12:59:37.987 に答える