使用 new [] 在 C++ 中创建自定义 a 类型的动态数组

Using new [] to create a dynamic array of custom a type in C++

本文关键字:自定义 类型 数组 动态 创建 new C++ 使用      更新时间:2023-10-16
自定义

类型的动态数组有什么特别需要注意的吗?

我正在尝试创建一个条件参数的动态数组(定义如下)

ConditionParameter* m_params;
...
m_params = new ConditionParameter[m_numParams];

但上面一行的结果只是一个 ConditionParameter 类型的新对象,其地址存储在 m_params 中。

struct ConditionParameter
{
    ConditionParameter() :
    type(OBJ_TYPE_OBJECT),
    semantic(OP_SEMANTIC_TYPE_NONE),
    instance(NULL),
    attrib(ATTRIB_TYPE_NONE),
    value(0)
    {}
    ConditionParameter(const ConditionParameter& other)
    {
        attrib = other.attrib;
        instance = other.instance;
        semantic = other.semantic;
        type = other.type;
        value = other.value;
    }
    ConditionParameter& operator = (ConditionParameter& other)
    {
        attrib = other.attrib;
        instance = other.instance;
        semantic = other.semantic;
        type = other.type;
        value = other.value;
        return *this;
    }
    ObjectType          type;   
    OperandSemanticType semantic;
    Object*             instance;
    AttributeType       attrib;
    int                 value;
};

但是上面一行的结果只是一个类型的新对象 条件参数,其地址存储在m_params中。

不,结果是ConditionParameter的实例化m_numParams - 指向第一个实例的指针由 new 返回。

new[]创建ConditionParameter对象的连续数组。 第一个位于 m_params . 您可以使用 [] 运算符获取后续实例化,如下所示:

ConditionParameter* secondParam = &m_params[1];

你可以通过一点"sprintf debugging"来证明这一点:

ConditionParameter() :
    type(OBJ_TYPE_OBJECT),
    semantic(OP_SEMANTIC_TYPE_NONE),
    instance(NULL),
    attrib(ATTRIB_TYPE_NONE),
    value(0)
    {
      cout << "Constructorn";
    }
当然,

new返回指向已分配内存块的第一个元素的指针。 这就是为什么您将 new 的结果分配给 ConditionParameter* 类型的变量,该变量实际上是指向 ConditionParameter 的指针。但是,这并不意味着已分配单个对象。除非 new 返回 null,否则它将分配您告诉它的任意数量的对象。