我正在實現一個二進制堆類。堆被實現爲動態分配的數組。堆類有成員的身份,大小和一個指向數組的指針,如:構造函數中的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