J'implémente une classe de tas binaire. Le tas est implémenté en tant que tableau alloué dynamiquement. La classe de tas a une capacité de membres, la taille et un pointeur sur un tableau, comme:Malloc dans les constructeurs
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.
};
Mon construcor ressemble à ceci:
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;
}
Depuis que je suis allouer de deux fois et déréférencement les deux pointeurs dans le constructeur , Je devrais vérifier si ça réussit. Mais que dois-je faire si cela échoue? Le constructeur ne peut rien retourner pour indiquer qu'il a échoué. Est-ce une bonne pratique de programmation d'éviter complètement les mallocs dans les constructeurs?
Bonjour, @Sahil! Bienvenue dans Stack Overflow. Merci d'avoir collé le code correspondant à votre question, mais veuillez le formater en code lorsque vous poserez votre question suivante (indiquez chaque ligne quatre espaces ou utilisez le bouton '{}'). De plus, je ne pense pas que vous ayez besoin de votre variable membre "H". L'espace pour l'objet 'Heap' a déjà été alloué au moment où votre constructeur est entré. Vous avez juste besoin d'allouer de l'espace pour le tableau 'Elements'. –
Je ne comprends pas pourquoi votre objet Heap a un pointeur vers un autre objet Heap, en particulier lorsque vous n'utilisez pas les membres de l'objet que vous construisez. Je perdrais le premier 'malloc' et utiliserais directement les membres de votre objet. –
En fait, il est assez mauvais d'avoir le pointeur H sur la mémoire où le constructeur ne s'est pas exécuté. Je peux parier que déréférencer 'H' invoque un comportement indéfini. Pourquoi ne pas simplement stocker 'capacity',' size' et 'Elements' directement dans votre classe? – Vlad