使用新的[]创建C++中自定义类型的动态数组
对于自定义类型的动态数组,有什么特别需要注意的吗 我试图在下面创建条件参数定义的动态数组使用新的[]创建C++中自定义类型的动态数组,c++,arrays,dynamic,types,C++,Arrays,Dynamic,Types,对于自定义类型的动态数组,有什么特别需要注意的吗 我试图在下面创建条件参数定义的动态数组 ConditionParameter* m_params; ... m_params = new ConditionParameter[m_numParams]; 但上面这一行的结果只是ConditionParameter类型的一个新对象,其地址存储在m_params中 struct ConditionParameter { ConditionParameter() : type(OBJ_
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;
};
当然,它是新的,返回指向分配内存块的第一个元素的指针。这就是为什么要将new的结果赋给ConditionParameter*类型的变量,该变量实际上是指向ConditionParameter的指针。但是,这并不意味着分配了单个对象。除非new返回null,否则它将按照您告诉它的数量分配对象
但上面这一行的结果只是一个新的类型对象
ConditionParameter,其地址存储在m_参数中
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;
};
否,结果是ConditionParameter的m_numParams实例化-指向第一个实例的指针由new返回
new[]创建ConditionParameter对象的连续数组。第一个位于m_params。您可以使用[]运算符进行后续实例化,如下所示:
ConditionParameter* secondParam = &m_params[1];
您可以通过以下几点向自己证明这一点:
只有一个新对象-不正确。您可以通过在构造函数中打印一些内容来验证这一点。@albizgil,调试器不知道m_参数是如何创建的。他只知道它是一个ConditionParameter*,并且只会将其解释为ConditionParameter*。请改用std::vector!我不能准确地回忆起,但我相信您可以通过在watch/var窗口中使用变量len语法来指定要扩展的块分配序列的数组计数。即,输入m_params,N,其中N是您分配的元素数。我可能在语法上弄错了,但我知道有这个功能。@WhozCraig:你是对的,请参阅Visual Studio。是的,但它不应该创建m_numParams对象吗?它只创建一个对象。它创建所需数量的对象,但返回指向其中第一个对象的指针。@albizgil您怎么认为它只创建了一个对象?