我正在实现一个二进制堆类。堆被实现为动态分配的数组。堆类有成员的身份,大小和一个指向数组的指针,如:构造函数中的malloc
class Heap
{
private:
Heap* H;
int capacity; //Size of the array.
int size; //Number of elements currently in the array
ElementType* Elements; //Pointer to the array of size (capacity+1)
//I've omitted the rest of the class.
};
我construcor看起来是这样的:
Heap::Heap (int maxElements)
{
H = (Heap*) malloc (sizeof (Heap));
H -> Elements = (ElementType*) malloc ((maxElements+1)*sizeof (ElementType));
H -> Elements[0] = DUMMY_VALUE; //Dummy value
H -> capacity = maxElements;
H -> size = 0;
}
由于我mallocing两次,并在构造函数中提领两个指针,我应该检查它是否成功。但如果失败了,我该怎么办?构造函数本身不能返回任何东西来表明它失败。完全避免构造函数中的malloc是不错的编程习惯吗?
你好,@Sahil!欢迎来到Stack Overflow。感谢您粘贴与您的问题相关的代码,但请在提出下一个问题时将其格式化为代码(每行缩进四个空格,或使用标有'{}'的按钮)。另外,我不认为你需要你的'H'成员变量。当你的构造函数被输入时,'Heap'对象的空间已经被分配了。你只需要为'Elements'数组分配空间。 – 2011-06-10 19:36:36
我不明白为什么你的Heap对象有一个指向另一个Heap对象的指针,特别是当你不使用你正在构造的对象的成员时。我会失去第一个'malloc'并直接使用你的对象的成员。 – 2011-06-10 19:39:43
事实上,让指针“H”指向构造函数没有运行的内存是非常糟糕的做法。我敢打赌,解引用'H'调用未定义的行为。为什么不直接在你的课堂上储存'capacity','size'和'Elements'? – Vlad 2011-06-10 19:41:14