0

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

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

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;
};
4

2 回答 2

6

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

不,结果是m_numParams实例化ConditionParameter——指向第一个的指针new.

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

ConditionParameter* secondParam = &m_params[1];

您可以通过一点“ sprintf 调试”向自己证明这一点:

ConditionParameter() :
    type(OBJ_TYPE_OBJECT),
    semantic(OP_SEMANTIC_TYPE_NONE),
    instance(NULL),
    attrib(ATTRIB_TYPE_NONE),
    value(0)
    {
      cout << "Constructor\n";
    }
于 2013-10-30T18:19:45.763 回答
1

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

于 2013-10-30T18:17:42.050 回答