不熟悉使用'new'进行内存分配(C ++)

时间:2011-11-03 19:20:54

标签: c++

我正在研究一些遗留代码。我有以下数据类型:

typedef struct {

    char        *name ;

    ColumnType  type ;

    unsigned    pos ;    //column position in table

    CellData    **data ; //ptr to list of cells in column

}Column ;

struct _table {

    char name[TABLE_NAME_LEN+1] ;

    unsigned int num_rows ;

    unsigned int num_cols ;

    Column  **cols ; //ptr to list of columns

};



struct _table m_

在源代码中,有以下声明:

m_table.cols = new Column*[m_table.num_cols];

我熟悉new [],但我不确定乘法运算符在那里做什么 - 可以解释一下吗?

6 个答案:

答案 0 :(得分:4)

这不是乘法。符号*在C ++中有许多完全不同的含义,所有这些都取决于上下文。

在您的情况下,您正在创建Column*的动态数组,即指向Column的指针。

换句话说,您说new T[N];,其中T = Column*

答案 1 :(得分:3)

它不是乘法运算符。而是分配一个Column*数组(指向Column类型的指针)。结果数组存储指针值

m_table.cols = new Column*[m_table.num_cols];
m_table.cols[0] = Column();  // Error: Expected Column* got Column
m_table.cols[0] = new Column();  // Ok

答案 2 :(得分:0)

在你的情况下,Column*是一个类型(用于指向Column类实例的指针)并且你创建了一个数组。

答案 3 :(得分:0)

它不是乘法运算符。它正在分配一个指向Column的指针数组,而不是Column的数组。

答案 4 :(得分:0)

它不是乘法运算符,它是指针规范,即“指向列的指针”。

答案 5 :(得分:0)

*表示指针。所以你要创建一个Column指针数组。