new et delete

Sources d'information

Librairie(s) requise(s)

iostream

Comment ça marche

Ils remplacent malloc et free en c.

Les commandes new et delete sont requisent pour alouer des classes et en stack et bien appeler de constructeur de l'objet / le destructeur

#include 
#include 

class Student
{
	private:
		std::string _login;

	public:
		Student(std::string login) : _login(login)
		{
			std::cout << "Student " << this->_login << " is born" << std::endl;
		}
		~Student()
		{
			std::cout << "Student " << this->_login << " died" << std::endl;
		}

};

int main ()
{

	// Allocation sur la stack (sur la pile) et desalloue automatiquement
	Student     bob = Student("bfubar");
	// Allocation dynamique avec new sur la Heap (sur le tas) et desalloue avec delete
	Student*    jim = new Student("jfubar");

	delete jim; // Appelle le destructeur de jim
	return (0); // Appelle le destructeur de bob

}		
	
Student bfubar is born
Student jfubar is born
Student jfubar died
Student bfubar died
	

Dans le cas de création de tableaux d'objets, il est impossible de passer des paramètres, donc d'initialiser les objets par programme.

#include 
#include 

class Student
{
	private:
		std::string _login;

	public:
		// aucun parametre n'est possible dans le constructeur par defaut d'une array
		Student() : _login("ldefault")
		{
			std::cout << "Student " << this->_login << " is born" << std::endl;
		}
		~Student()
		{
			std::cout << "Student " << this->_login << " died" << std::endl;
		}

};

int main ()
{

	// Allocation dynamique sur la Heap (sur le tas) de 42 objets student
	Student*    students = new Student[42];

	

	delete [] students; // Appelle le destructeur de tableau students
	return (0);

}
	
... 42x
Student ldefault is born
Student ldefault is born
Student ldefault died
Student ldefault died
... 42x
	

retour


© 2022, vroch
Revisé le : 11 nov 2022
URL : http://vroch.ch/vr_tech_037.html
Main : http://vroch.ch