在类中动态分配数组的这两种方法有什么区别?

what is the differnce between these two method of Dynamic allocation of array in a class

本文关键字:方法 什么 区别 两种 动态分配 数组      更新时间:2023-10-16

我正在尝试动态分配一个类内的数组。遇到一件很奇怪的事。请看看这两段代码,并告诉我它们的区别。

class A{
public:
    int n;
    int *a;
    a = new int [4];
    ~A(){delete []a;}
    A(){}
}

用GCC编译会产生以下错误:

a没有名称类型

但是当我使用:

class A{
public:
    int n;
    int *a = new int [4];
    A(){}
    ~A(){ delete []a;}
}

它编译

a= new int [4];

不是初始化,而是赋值,不允许。

int *a = new int [4];

作为类内初始化,在c++ 11及以后的版本中是允许的。

你也混合了new[]delete。当你使用new时,你应该调用delete,当你使用new[]时,你需要调用delete[]

现在不是处理指针和new[]delete[],你应该使用std::vector来代替。

初始化:

int *a = new int [4];

这是一个不能在类声明中完成的赋值,但可以在构造函数中完成:

a = new int [4];

同样,如果你使用new[],你也需要使用delete[],而不是delete

我不清楚你到底想要什么,但这项工作应该在类的构造函数和析构函数中完成

class A
{
public:
    A() { a = new int[4]; }
    ~A() { delete[] a; }
private:
    int* a;
};

更好的是,如果你使用std::vector

,你可以避免自己做任何动态分配。
class A
{
public:
    A() : a(4) {}
private:
    std::vector<int> a;
};
相关文章: