Built with from Grav and Hugo
1- Quels sont les avantages et les inconvénients de la pile par rapport du tas ?
2- A quoi sert le mot-clef delete[] ?
delete[]
3- Quels sont les deux événements qui délimitent la durée de vie d’une donnée ?
4- Qu’est-ce qu’une dangling-reference ? Donnez un exemple de situation dans lequel on peut en avoir une.
Les prochaines questions font référence au code suivant :
class Toto { public: Toto(int v1) : _v4(_v3), _v1(v1), _v2(_v5) { _v3 = 3; } private: int _v1 = 1; int _v2 = 2; int _v3; int _v4 = 4; int _v5 = 5; }
5- Dans quel ordre sont instanciés les attributs de la classe ?
6- Quelles sont leurs valeurs après la construction d’une instance de Toto ?
Toto
class Dictionary { public: void add_definition(std::string word, std::string definition) { _definitions_by_words[word].emplace_back(definition); } std::vector<std::string> get_definitions(std::string word) const { return _definitions_by_words[word]; } std::string get_first_definition(std::string word) const { auto it = _definitions_by_words.find(word); if (it != _definitions_by_words.end()) { auto found_definitions = it->second; if (found_definitions.empty()) { return found_definitions.front(); } } auto default_value = std::string { "No definition found for " } + word; return default_value; } private: std::map<std::string, std::vector<std::string>> _definitions_by_words; };
7- Réécrivez les fonctions-membres de la classe Dictionary de manière à éliminer les copies inutiles. (N’hésitez pas à aller voir la documentation de map si vous ne comprenez pas ce que font certaines instructions)
Dictionary
map
Les prochaines questions concernent le code suivant :
struct Person { std::string name; }; struct Dog { std::string name; Person& human }; int main() { auto jean = Person { "Jean" }; auto attila = Dog { "Attila", jean }; auto people = std::vector<Person*> { &jean, new Person { "Pierre" } }; return 0; }
8- Qui own jean ?
jean
9- Qui own attila ?
attila
10- Qui own attila.human ?
attila.human
11- Qui own attila.name ?
attila.name
12- people[0] et people[1] sont-ils plutôt des pointeurs ownants ou observants ? Justifiez.
people[0]
people[1]
13- Quel problème associé à la mémoire peut-on relever dans ce code ?