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

Unfamiliar use of 'new' for memory allocation (C++)

本文关键字:分配 C++ 内存 new 不熟悉      更新时间:2023-10-16

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

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[],但我不确定乘法运算符在那里做什么-可以解释吗?

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

在你的例子中,你正在创建一个Column*的动态数组,即指向Column的指针。

换句话说,你说的是new T[N];,而T = Column* .

这不是一个乘法运算符。相反,它分配一个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

在您的示例中,Column*是一个类型(用于指向Column类实例的指针),并且您创建了它们的数组

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

这不是一个乘法运算符,这是一个指针规范,即。"指向列的指针".

*表示指针。因此,您正在创建一个Column指针数组。