Pile vs Tas de C++

J'avais juste une question rapide sur la façon de pile variables en fonction de tas de variables de travail. Si je comprends bien, pile les variables sont des variables qu'après le retour des fonctions seront supprimés, et des tas de variables sont persistantes. Mais ce que je suis vraiment confus au sujet est de savoir comment allouer des tas de variables à l'intérieur des fonctions:

int MyObject::addObject(const char* a){
    MyObject newObject(a);
    return 0;
}

Dire que j'ai un constructeur pour MyObject qui est newObject(const char * a). Ensuite, dans cette fonction, lorsqu'elle est appelée, après le retour n'est nouvellement construit newObject supprimés? Si oui, comment pouvez-vous attribuer le tas à l'intérieur d'une fonction, alors? Si non, comment faites-vous le nettoyage de votre mémoire plus tard?

En outre, quel est exactement le rôle d'un destructeur et quand est-il appelé?

  • Avez-vous envisagé d'utiliser des std::string à la place de char* ? Jetant C gestion de la mémoire dans le mélange a tendance à confondre, votre MyObject classe doit maintenant décider de comment est propriétaire de la mémoire pour le pointeur et très probablement besoin de copier la chaîne et d'un destructeur de le libérer à nouveau. Ne pas le faire, c'est très probablement chemin à l'échec.
  • Vous ne devriez même pas penser à propos de "pile" et "tas". Quand vous conduisez une voiture, vous n'avez généralement pas à propos de cylindre cycle de modèles, pensez-vous? Les choses pour les comprendre en C++ sont les classes de stockage et durée de vie des objets: automatique (étendue), dynamique (manuel), statique (global).
  • Lors de la nouvelle C ou C++, seriez-vous d'accord qu'il est bon de connaître la différence entre les deux? Je pense que c'est ce que l'OP est ici.
  • Je dirais que c'est distrayant et trompeur de même considérer les deux. Ceux-ci sont un détail de l'implémentation que vous pouvez méditer sur un dimanche pluvieux autour d'un café, mais pour les fins de compréhension, C++, ils sont inutiles, et le bruit... surtout lorsque vous êtes nouveau et d'autre part la plus importante des choses à apprendre 🙂
  • Quelle coïncidence, c'est dimanche et il pleut. Le café coule.
  • SB, fortement en désaccord. Savez-vous que la taille de pile par défaut sur Windows 32 bits est de 1 mo? Si le novice ne sait pas, d' (s), il peut penser, cool, je vais utiliser la pile, tout le temps, mais vous ne devriez vraiment pas faire cela.
  • Je dirais que c'est un algorithme qui utilise beaucoup la taille de la pile peut avoir d'autres problèmes. Bien sûr, il ya des situations où vous avez juste besoin d'une partie de la mémoire (dans ce cas, vous devriez baisse-dans le remplacement d'un std::unique_ptr<Foo[]>), mais ce devrait être une exception rare.
  • J'ai trop pas d'accord. Ce ne sont pas des détails de mise en œuvre, ce sont les concepts que vous devez comprendre, pour les mêmes raisons que les Classes et les Objets sont des concepts dans un langage de programmation orientée objet, et vous devriez le comprendre ainsi. Si vous ne savez pas où vos objets et la durée de vie de ceux-ci, vous n'allez pas être en mesure d'écrire efficace de code c++. Pas dans l'état actuel de la langue est au moins. Il ya seulement tellement que vous pouvez vous en sortir en juste à gratter la surface.

InformationsquelleAutor KWJ2104 | 2011-12-11