不熟悉使用'new'进行内存分配 (C++)
Unfamiliar use of 'new' for memory allocation (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[],但我不确定乘法运算符在那里做什么-可以解释吗?
这不是乘法。符号*
在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
指针数组。
相关文章:
- 将数组的地址分配给变量并删除
- vector.resize()中的分配错误
- 如果C++类在类方法中具有动态分配,但没有构造函数/析构函数或任何非静态成员,那么它仍然是POD类型吗
- Win32编译器选项和内存分配
- 函数中堆分配的效果与缺少堆分配的情况
- 使用动态分配的数组会导致代码分析发出虚假的C6386缓冲区溢出警告
- 多个文件的内存分配错误"在抛出 'std :: bad_alloc' what (): std :: bad_alloc 的实例后终止调用" [C++]
- 获取字符串的长度并将其分配给数组
- 将地址分配给本地指针后,公共对象的变量将消失
- 递归模板化函数不能分配给具有常量限定类型"const tt &"的变量"state"
- 有没有一种方法可以使用placement new将堆叠对象分配给分配的内存
- 我在二维向量中是否正确分配了内存
- 正在尝试重载二进制搜索树分配运算符
- GlobalAlloc而不是其他分配方法
- 自定义先决条件对移动分配运算符有效吗
- 我可以重新分配/覆盖std::字符串吗
- 在c++中使用动态分配的问题
- 当一个新对象被分配到它的地址时,对象是否必须被销毁
- 为什么我可以使用比分配的内存更多的内存
- 使用RAII在给定次数的迭代后重新分配资源