Cet interfaçage demande à faire une couche de translation C ou C++98 vers C++11. Hors ces 3 langages sont presque totalement compatibles donc il est assez subtile de s'assurer que l'on ne leak pas du C dans le reste de ton programme. Une méthode C++98 qui te retourne un objet dont les méthodes manipulent des pointeurs nus. Tu va devoir proxifier l'ensemble de l'objet en tenant potentiellement compte de l'overhead que tu introduit (c'est important pour un langage dont l'un des principaux arguments c'est la performance).
Là, tu racontes absolument n'importe quoi. Faire une surcouche C++ d'une bibliothèque en C, ça améliore la sûreté d'utilisation de la bibliothèque en C sans ajouter aucun overhead. Petit exemple, disons que j'ai une bibliothèque C avec des fonctions de ce genre:
classFoo{public:Foo(intfoo_param):m_f(foo_create(foo_param)){}~Foo(){if(m_f){foo_delete(m_f);}}// j'interdis les copies parce que l'API de base ne permet pas de copier l'objetFoo(Foo&)=delete;Foo&operator(Foo&)=delete;// j'autorise le transfert de propriétéFoo(Foo&&other):m_f(std::exchange(other.m_f,nullptr)){}Foo&operator=(Foo&other){std::swap(m_f,other.m_f);}voiddoSomething()const{foo_do_something(m_f);}private:foo*m_f;};
Comme tout va être inliné, je n'ai aucun overhead, et je m'assure que le destructeur fait bien son boulot dans tous les cas. Et du point de vue du programmeur C++, il n'y aucun pointeur venu du C à gérer, c'est totalement transparent.
[^] # Re: Les avantages de C++ ne sont pas bien différentes avec Rust
Posté par rewind (Mastodon) . En réponse à la dépêche Faut‐il continuer à apprendre le C++ ?. Évalué à 7. Dernière modification le 15 août 2018 à 18:39.
Là, tu racontes absolument n'importe quoi. Faire une surcouche C++ d'une bibliothèque en C, ça améliore la sûreté d'utilisation de la bibliothèque en C sans ajouter aucun overhead. Petit exemple, disons que j'ai une bibliothèque C avec des fonctions de ce genre:
Je fais ma surcouche de la manière suivante:
Comme tout va être inliné, je n'ai aucun overhead, et je m'assure que le destructeur fait bien son boulot dans tous les cas. Et du point de vue du programmeur C++, il n'y aucun pointeur venu du C à gérer, c'est totalement transparent.