0

私には2つの選択肢があります:

class X{
int* x;
int size = ...;
void create() { 
    x = new int[size];
    use();
    delete [] x;
}
void use() {//use array}
};

また:

class X{
int size = ...;
void create(){ 
    int x[size];
    use(x);
}
void use(int arg[]) {//use arg}
}; 

どちらが良いですか?

4

2 に答える 2

8

を使用して、オプション 3 の方が優れてstd::vectorいます。

class X{
    std::vector<int> x;
    int size; // = ...; <-- the "=" part is illegal in C++03
    void create() { 
        x.resize(size);
        use();
    } 
};

また、2 番目のスニペットは違法です。C++ は VLA をサポートしていません。

于 2012-05-07T11:21:24.323 に答える
2

サイズは定数値ではないため、2 番目の方法は機能しません。

最初の代替案では、割り当て解除 ( ) を実行する必要があるデストラクタがありdelete[] xません。

3 番目の代替案を提案しますstd::vector<int>。x に class を使用します。メモリの割り当てを解除するために明示的なデストラクタは必要ありません。一般に、C スタイルの配列よりも安全に使用できます。

于 2012-05-07T11:22:53.613 に答える