Quels sont les concepts souvent mal compris en c ++?
Réponses
Trop de publicités?Ce C ++ a fait la gestion automatique des ressources.
(La plupart des gens qui prétendent que C ++ n'a pas de gestion de la mémoire essaient d'en utiliser trop et de supprimer trop, ne réalisant pas que s'ils permettaient à C ++ de gérer eux-mêmes la ressource, la tâche devient beaucoup plus facile).
Exemple: (Fabriqué avec une API composée parce que je n'ai pas le temps de vérifier les documents maintenant)
// C++
void DoSomething()
{
File file("/tmp/dosomething", "rb");
... do stuff with file...
// file is automatically free'ed and closed.
}
// C#
public void DoSomething()
{
File file = new File("/tmp/dosomething", "rb");
... do stuff with file...
// file is NOT automatically closed.
// What if the caller calls DoSomething() in a tight loop?
// C# requires you to be aware of the implementation of the File class
// and forces you to accommodate, thus voiding implementation-hiding
// principles.
// Approaches may include:
// 1) Utilizing the IDisposable pattern.
// 2) Utilizing try-finally guards, which quickly gets messy.
// 3) The nagging doubt that you've forgotten something /somewhere/ in your
// 1 million loc project.
// 4) The realization that point #3 can not be fixed by fixing the File
// class.
}
Gratuit fonctions ne sont pas mauvais juste parce qu'ils ne sont pas dans une classe C++ n'est pas un langage de programmation orientée objet seul, mais s'appuie sur l'intégralité de la pile de techniques.
J'ai entendu parler plusieurs fois quand les gens disent des fonctions libres (ceux dans les espaces de noms et de l'espace de noms global) sont une "relique de C-temps, et doit être évitée. Tout à fait le contraire qui est vrai. Gratuit fonctions permettent de dissocier les fonctions de classes spécifiques et de permettre la réutilisation de fonctionnalités. Il est également recommandé d'utiliser des fonctions libres au lieu des fonctions de membre si la fonction n'avez pas besoin d'accéder aux détails de mise en œuvre - car cela permettra d'éliminer une cascade de changements quand on change la mise en œuvre d'une catégorie parmi d'autres avantages.
Cela se reflète aussi dans la langue: La gamme à base de boucle en C++0x
(suivant version C++ disponibles très bientôt) sera basé sur la gratuité des appels de fonction. Il obtiendra de début / fin des itérateurs en appelant des fonctions gratuites begin
et end
.
Par ordre décroissant:
- assurez-vous de libérer des pointeurs pour la mémoire allouée
- quand les destructeurs doivent être virtuels
- comment fonctionnent les fonctions virtuelles
Il est intéressant de noter que peu de gens connaissent tous les détails des fonctions virtuelles, mais semblent toujours d'accord pour faire le travail.