0

我有两种选择:

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();
    } 
};

此外,您的第二个片段是非法的,C++ 不支持 VLA。

于 2012-05-07T11:21:24.323 回答
2

第二种选择不起作用,因为大小不是一个恒定值。

delete[] x第一个替代方案错过了应该执行释放 ( ) 的析构函数。

我建议第三种选择:使用std::vector<int>x 类。您不需要显式析构函数来释放内存,而且它通常比 C 风格的数组更安全。

于 2012-05-07T11:22:53.613 回答