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

Мой конструктор выглядит следующим образом:

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

Поскольку я дважды сбрасываю блоки и разыменую оба указателя в конструкторе, я должен проверить, удалось ли это. Но что мне делать, если это не удается? Сам конструктор не может ничего вернуть, чтобы указать на сбой. Является ли хорошей практикой программирования полностью избегать ошибок в конструкторах?

5
задан Robᵩ 10 June 2011 в 19:39
поделиться