用C ++创建动态对象动态数组

时间:2013-11-30 18:11:36

标签: c++ arrays dynamic-memory-allocation

我知道如何创建动态对象数组。

例如,班级名称为Stock。

Stock *stockArray[4];
for(int i = 0 ; i < 4;i++)
{
   stockArray[i] = new Stock();
}

如何将其更改为动态对象的动态数组?

我尝试了什么:

股票 stockArrayPointer =新股票股票[4];

它不起作用,错误是“股票的价值**不能用于初始化股票类型的实体。

第二个问题是在创建动态对象的动态数组之后,访问数组中指针的语法是什么。

现在,我使用stockArray [i] = new Stock();这将如何改变?

需要一些指导...

4 个答案:

答案 0 :(得分:6)

如果您使用的是c ++,那么您不应该重新发明轮子,只需使用vectors

#include <vector>

std::vector< std::vector< Stock > > StockVector;

// do this as many times as you wish
StockVector.push_back( std::vector< Stock >() );

// Now you are adding a stock to the i-th stockarray
StockVector[i].push_back( Stock() );

编辑:

我不明白你的问题,如果你只想在堆上分配数组并使用:

Stock** StockArrayArray = new Stock*[n]; // where n is number of arrays to create
for( int  i = 0; i < n; ++i )
{
    StockArrayArray[i] = new Stock[25];
}

// for freeing
for( int i = 0; i < n; ++i )
{
    delete[] StockArrayArray[i];
}
delete[] StockArrayArray;

答案 1 :(得分:4)

动态数组的变量类型是指向数组的第一个对象的指针。你想要一个动态分配Stock对象的数组,所以指向Stock的指针数组,所以你的变量是指向Stock的指针:

int n = 4; // dynamic size of the array;
Stock** stockArray = new Stock*[n];
for (int i = 0; i != n; ++i)
{
    stockArray[i] = new Stock();
}

并释放它:

for (int i = 0; i != n; ++i)
{
    delete stockArray[i];
}
delete[] stockArray;

答案 2 :(得分:2)

Stock* stockArrayPointer = new Stock [4];
仅当Stock类具有零参数构造函数时,

才有效 如果它没有任何零参数构造函数,则无法动态创建动态对象数组

你可以像所说的那样用静态数组创建一个动态对象数组,如

Stock stockArrayPointer[4]={Stock(args),Stock (args)};

但语法

Stock* stockArrayPointer=new Stock[4]{Stock(args),Stock (args)}; does not hold

或如上所述 使用矢量...
向量是在堆上分配的内存 所以向量是动态分配

vector<Stock> V;
V.push_back(Stock(args));

V.push_back(new Stock(args));

原因

Stock* stockArrayPointer=new Stock[4]{Stock(args),Stock (args)};

不成立 是因为 这意味着 你错误地使用了新的操作符

答案 3 :(得分:0)

我做了一些完美的工作:

#include <iostream>
#include <cstring>
#include <cstdlib>
using namespace std; 

class student {
    string name;
    int age;
    int roll;
    public:
        student() {
            name="";
            age=0;
            roll=0;
        }
        student (string n, int a, int r) {
            name=n;
            age=a;
            roll=r;
        }
        void show_details (); 
};
void student::show_details() {
    cout << "Name: " << name << "\n";
    cout << "Age: " << age << "\n";
    cout << "Roll No: " << roll << "\n";
}
int main() {
    string a; int b, c, n;
    cin >> n;
    student **obj;
    obj=(student**)malloc(n*sizeof(student*));
    for (int i=0; i<n; i++) {
        cin >> a;
        cin >> b;
        cin >> c;
        obj[i]=new student(a,b,c);
    }
    for (int i=0; i<n; i++) {
        obj[i]->show_details();
    }
    for (int i=0; i<n; i++) free (obj[i]);
    free (obj);
}

是的...我使用指向数组部分的指针,它适用于可变大小的数组。