C++在构造函数中设置类成员数组的2d数组大小

问题描述:

我只找到1d数组的解决方案,但无法将它们应用于2d数组。 可能的解决方案包括“矢量”,“模板”和“指向数组的指针”。C++在构造函数中设置类成员数组的2d数组大小

我知道我可以让矢量工作,但我宁愿使用其他2.最好是模板,因为我不想手动摧毁,但指针也工作。 (指针将指向在构造函数中创建的数组)。

该类包含一个称为屏幕的空2D数组。构造函数应该设置其大小。我尝试了太多的东西来将它们全部列在这里,但我会展示我现在拥有的东西。 (我试图最后一件事是指向数组在构造函数中创建的。在这种情况下的屏幕是一个字符指针)在新的表达式

Screen::Screen(const int w, const int h) : screen(new char[h][w]) {} { 
    width = w; 
    height = h; 
} 

数组大小必须是恒定的

我失败实施这些策略之一,并试图使其工作时收到许多种错误。我将如何解决这个问题? (主要是我想知道如何用模板做到这一点,如果不可能,然后指针指向在构造函数中创建的数组)

+1

向量,模板和指向数组的指针如何连接...无论如何,我不明白你的问题。发布一些你试过写的实际代码,我们会看到它有什么问题。 – DeiDei

+0

首先添加一些代码,告诉我们你的尝试。 – vsoftco

+0

编译时是否已知'w','h'值? –

这个问题有点含糊,但它听起来像你想动态地分配给定的数组输入。 编辑我改变了答案以匹配您提供的代码。这给出了高度和宽度的二维字符数组。

class Screen { 
    private: 
     char **data; 
     int rows; 
     int columns; 

    public: 
     Screen(int num_rows, int num_cols); 
}; 

Screen::Screen(int num_rows, int num_cols) { 
    data = new char * [num_rows]; 
    for (int i = 0; i < num_rows; ++i) { 
     data[i] = new char[num_cols]; 
    } 
    rows = num_rows; 
    columns = num_cols; 
} 

这创建了一个空的二维字符数组。

说明:c中的所有数组只是指向已声明类型的内存中第一个块的指针。通过让成员变量为双指针,你有一个char指针数组,每个数组指向每个数组中的第一个值。

但是要小心,你需要释放数据变量来避免内存泄漏,通过声明一个析构函数。

Screen::~Screen() { 
    for (int i = 0; i < rows; ++i) { 
     delete[] data[i]; 
    } 
    delete[] data; 
} 
+1

你忘了在析构函数中释放某些东西。 '删除[]数据' –

+0

所以我做了,谢谢指出! – rhysvo

+0

这是一个很大的混乱和违反三规则 - 你应该使用矢量或向量的矢量,而不是这种方法 –