Outils pour utilisateurs

Outils du site


lang:cpp:classes

Différences

Ci-dessous, les différences entre deux révisions de la page.

Lien vers cette vue comparative

Les deux révisions précédentesRévision précédente
Prochaine révision
Révision précédente
lang:cpp:classes [2021/03/28 17:08] – Ajout d'une implémentation de "clone" rootlang:cpp:classes [2022/07/04 10:05] (Version actuelle) – [Destructeur] : lock_guard->scoped_lock root
Ligne 172: Ligne 172:
   std::mutex io_mutex;   std::mutex io_mutex;
   {   {
-    std::lock_guard<std::mutex> lk(io_mutex);+    std::scoped_lock<std::mutex> lk(io_mutex);
     std::cout << e1.id << " and " << e2.id << " are waiting for locks" << std::endl;     std::cout << e1.id << " and " << e2.id << " are waiting for locks" << std::endl;
     // le mutex est automatiquement libéré lors de l'appel du destructeur de lk.     // le mutex est automatiquement libéré lors de l'appel du destructeur de lk.
Ligne 520: Ligne 520:
 } }
 </code> </code>
 +
 +====vtable====
 +
 +Il n'existe pas de norme pour savoir où est l'adresse du pointeur de la table virtuelle. Cependant, en tout logique, c'est la première donnée de la classe.
 +
 +<code cpp>
 +#include <iostream>
 +
 +struct S {
 +  int x;
 +  virtual void f() {}
 +};
 +
 +int main() {
 +  S s;
 +  s.x = 5;
 +  std::cout << "size : " << sizeof(S) << "\n";
 +  void*** ptr = (void***)&s;
 +  std::cout << "address : " << ptr << "\n";
 +  std::cout << "bytes : " << *ptr << " and " << *(ptr + 1) << "\n";
 +  std::cout << "address if vftable : " << *ptr << "\naddress of f : " << **ptr
 +            << "\n";
 +  std::cin.get();
 +  return 0;
 +}
 +</code>
 +
 +[[http://www.cplusplus.com/forum/general/33019/|detemine vtable address]] {{ :lang:cpp:class:detemine_vtable_address_-_c_forum_2021-06-21_00_03_46_.html |Archive du 13/12/2010 le 22/06/2021}}
 +
 ====override / redéfinition==== ====override / redéfinition====
 ===Cas général=== ===Cas général===
lang/cpp/classes.1616944110.txt.gz · Dernière modification : 2021/03/28 17:08 de root