在c++中动态声明指向对象的指针数组

Declaring an array of pointers to objects dynamically in C++

本文关键字:对象 指针 数组 c++ 动态 声明      更新时间:2023-10-16

我必须在c++中声明一个指向对象(类)的指针数组。我认为这是唯一的方法,但显然我错了,因为当我试图编译它时,它会抛出语法错误。具体来说,在我收到的7个错误中,其中2个错误在行中:我使用"new"创建数组的地方,以及我调用"setData()"函数的地方。你能告诉我哪里做错了吗?谢谢。

#include <iostream>
class Test
{
    public:
        int x;
        Test() { x=0; }
        void setData(int n) { x=n; }
};
void main()
{
    int n;
    Test **a;
    cin >> n;
    a=new *Test[n];
    for(int i=0; i<n; i++)
    {
        *(a+i)=new Test();
        *(a+i)->setData(i*3);
    }
}

使用a=new Test*[n];
除此之外,你的程序中没有delete,简单的getter/setter
对于公共变量是陌生的,*(a+i)可以是a[i]

您的语法很接近,但有一点偏差。用这个代替:

Test **a;
...
a=new Test*[n];
for(int i=0; i<n; i++)
{
    a[i]=new Test();
    a[i]->setData(i*3);
}
...
// don't forget to free the memory when finished...
for(int i=0; i<n; i++)
{
    delete a[i];
}
delete[] a;

既然你正在使用c++,你应该使用std::vector代替。我还建议将所需的值传递给类构造函数:

#include <iostream>
#include <vector>
class Test
{
    public:
        int x;
        Test(int n = 0) : x(n) { }
        Test(const Test &t) : x(t.x) { }
        void setData(int n) { x=n; }
};
int main()
{
    int n;
    std::vector<Test> a;
    cin >> n;
    a.reserve(n);
    for(int i=0; i<n; i++)
    {
        a.push_back(Test(i*3));
    }
    ...
    // memory is freed automatically when finished...
    return 0;
}