mardi 23 octobre 2018

C'est quoi QML en Qt/C++ ?

C'est un langage de description d'interface graphique permettant aux objets décrits dans le QML d'être d'une part affichés dans l'UI et d'autre part d'interagir avec le Code C++ de Qt ou un autre langage comme Python.

Développement Qt/C++

Si vous utilisez Qt Creator la création du projet doit se faire avec l'option "Qt Quick Controls Application". Bon voilà, c'est à peu prêt tout, d'aucuns diront que c'est vraiment différent des projets "standards" mais il n'y a rien de bien sorcier là dedans.

QML est un peu l'équivalent du XAML en C#.NET.

Créer une extension de QML en Qt/C++

Rien de plus facile à la page Suivante : Qt Writing Extensions with C++
Il s'agit de créer une Class qui dérive d'un objet QML de base. C'est vraiment la force de QML c'est l'équivalent des UserControls en C# c'est à dire des .ASCX.

Il y a une partie description graphique de l'objet et une partie Code qui permet de coder le comportement du contrôle utilisateur. C'est ce que l'on trouve de puis puissant.

QML est dit aussi Qt Quick dans la littérature QML.

Voilà, on ira plus loin la prochaine fois !

vendredi 5 octobre 2018

Erreur LNK2019 - Error LNK2019 - symbole externe non résolu __except_handler4_common

Une des difficultés de la coexistence du langage C et du langage C++ ce sont les conventions de nommages du LINKER et cette error LNK2019 en est la conséquence. Pour trouver la solution c'est un peu la catastrophe :

Erreur des outils Éditeur de liens LNK2019

Et alors après avoir fait tout ça, je me retrouve avec l'erreur suivante :

Gravité Code Description Projet Fichier Ligne État de la suppression
Erreur LNK2019 symbole externe non résolu __except_handler4_common référencé dans la fonction __except_handler4 MFCStarterKit D:\Mabyre\Visual Studio\CPlusPlus\MFCStarterKit4.1\MFCStarterKit\MFCStarterKit\MSVCRTD.lib(_chandler4gs_.obj) 1

Merci ! Heureusement qu'il y des âmes charitables, la solution se trouvait ici :

https://stackoverrun.com/fr/q/8776145

malheureusement stackoverrun a disparu, lien cassé, pas grave, j'ai noté tout ça ici ...

Dans votre projet de bibliothèque, consultez : 

Propriétés -> C/C++ -> Génération de code -> Runtime Library :

Il y a des chances qu'il soit réglé sur :

DLL multithread de débogage (/ MDd)

Changez cette option et mettez la à :

multithread Debug (/ MTd)

et à la reconstruction, l'erreur aura disparue !

stackoverrun à disparu !

L'original de cet article dans :

Unresolved external symbol __except_handler4_common" in Visual Studio 2015

Franchement : 

/MDd à la place de /MTD cela ne me serait pas venu à l'idée ...

Conseil pour ajouter une librairie à votre projet

Lorsque vous suivez les directives de la page suivante :

https://www.developpez.net/forums/d740287/c-cpp/outils-c-cpp/visual-cpp/visual-cpp-ajout-d-bibliotheque/

pour ajouter une librairie à votre projet. 

N'oubliez pas que vous pouvez mettre les chemins d'accès aux .lib .dll et autres en "relatif", si vous utilisez l'outil de recherche pour aller chercher les objets, il mettra le chemin en "absolu" et vous aurez alors des problèmes si vous renommez ou déplacez tout ou partie de votre projet.

Tous ces soucis ont été corrigés avec Visual Studio C#.NET, c'est curieux que cela ne le soit pas pour Visual C++ ...

Have fun!

jeudi 27 septembre 2018

Visual Studio C++ StarterKit avec MFC - Installation

Vous cherchez à développer avec Visual Studio en C++ et pourquoi pas ? On va voir ce que l'on peut faire avec cette plateforme et ses outils de développement. Comment utiliser Visual Studio pour développer en C++ ?

Installation des modules Visual Studio pour le C++

Avec Visual Studio 2017 en lançant l'installeur nous avons la possibilité d'installer trois modules :

Developpment Desktop en C++ avec Visual Studio
Développement Desktop en C++ avec Visual Studio
Mais nous avons la possibilité de développer pour les plateformes mobiles iOS et Android et Windows phone :


Développement mobile en C++ avec Visual Studio
Développement mobile en C++ avec Visual Studio
On voit également un module pour Linux.

Mon projet en C++ pour Desktop avec Visual Studio

J'instancie un projet de type Visual C++ pour créer une application avec Interface Graphique utilisateur qui s'exécute sous Windows.

Fichier->Nouveau->Projet->Autres langages->Visual C++->Application de bureau

Application de bureau Windows en C++
Application de bureau Windows en C++
Le projet est instancié :
Projet Visual Studio en C++
Je l'exécute :

Exécution du projet C++ avec Visual Studio
Une toute petite interface avec un tout petit menu.

Structure du projet Visual C++

Il faut aller voir dans les ressources pour trouver les objets graphiques, dans l'explorateur de solution je clique sur WindowsProject1.rc :


Visual C++ les ressources du projet
Visual C++ les ressources du projet
En double cliquant sur IDD_ABOUTBOX je retrouve la boite de dialogue About :



Boite de dialogue About
Boite de dialogue About
Tout ça est bien joli mais il n'y a pas les MFC. Je retourne dans l'installeur et je coche la case :

Installation des MFC pour Visual C++
Installation des MFC pour Visual C++
Et maintenant j'instancie un nouveau projet avec MFC (Microsoft Foundation Class) :

Application de bureau Windows avec MFC en C++
Application de bureau Windows avec MFC en C++
En cliquant sur OK je tombe sur un véritable Wizard de configuration de mon Application MFC :


Application de bureau avec MFC - Type d'application
SPA - MDI ?
SPA - MDI ?
Puis les choix s'enchainent ...

Choix pour le style du projet
Choix pour le style du projet

Et encore des choix :
Documents composés
Documents composés
Puis en cliquant sur le bouton suivant, on progresse dans le Wizard :


Propriétés du modèle de documents
Propriétés du modèle de documents
On atteint maintenant les choix concernant l'interface utilisateur :

Fonctionnalités de l'interface utilisateur
Ces choix sont importants, il est primordial de définir ces choix au départ car il sera ensuite bien difficile d'implémenter des barres de défilement si vous n'avez pas fait ce choix au départ.

On progresse ...


Fonctionnalités avancées
On progresse ...
Classes générées
On progresse

Classes de base
C'est incroyable tous les choix qu'il faut faire pour utiliser les MFS avec Visual C++.
On instancie le projet ...

Structure du projet Visual C++ MFC

C'est un peu plus compliqué ...

Visual Studio C++ Projet MFC
Visual Studio C++ Projet MFC
A l'exécution on obtient une application d'une complexité ... superbe !

Template d'application Visual C++ MFC
Template d'application Visual C++ MFC
Dont l'icône est :

Ajouter une légende

Pour la suite, je vous laisse avec un peu d'anglais

MFC - Quick Guide
Voici un Guide Tuto très complet sur le développement d'application de type MFC avec Visual C++

L'essentiel :
Votre application dérive de CWinApp : Class pour les Applications Windows

Developpez.com - Démarrer avec les MFC sous Visual C++
Egalement très bien pour démarrer, le problème c'est que c'est un PDF et pour le consulter il faut le télécharger. Le style est un peu ancien 2005 !

Accès aux ressources de l'application

Dans "Explorateur de solution" en cliquant sur le fichier .rc, la fenêtre d'affichage des ressources s'ouvre :
Ressrouces de l'applciation MFC C++
Affichage des ressources de l'application

Le code C++ au démarrage de l'application MFC

Dans l'Explorateur de solutions dans Fichiers sources : MainFrm.cpp (Main Frame) on atteint le code exécuté au démarrage de l'application :

Main Frame de l'application MFC C++
Main Frame de l'application MFC C++
En mettant un point d'arrêt dans la fonction OnCreate de CMainFrame :


Exécution du code de démarrage de l'application
Exécution du code de démarrage de l'application
Dans la pile d'appels on est appelé par wincore.cpp :

Appel de OnCreate par WindowProc de wincore.cpp
On accède au code de création de l'application MFC pour modifier ajouter ou supprimer des éléments graphiques de l'application.

Les MFC Microsoft Foundation Class

Les Microsoft Foundation Class ont donné des cauchemard à des générations entières de développeurs tellement abscons ! Il me faut prendre ici quelques notes en provenance du document :

ftp://ftp-developpez.com/farscape/tutoriels/demarrer-mfc-vc6.pdf

La notation hongroise, cela m'avait échappé en effet ...

C++ MFC notation hongroise

Ce PDF est véritablement le moyen de démarrer avec les MFC. C'est dommage que depuis le temps Microsoft n'ait pas proposé une alternative simple aux MFC. On ne peut pas parler de RAD (Rapid Application Development) avec les MFC c'est fastidieux long et pénible de développer avec ça.

Voilà c'est tout pour l'instant, c'était pour fixer rapidement les idées autour des applications Visual C++ avec MFC pouvoir modifier une ressource changer un peu le code au départ.

Conseil sur les MFC

Vous souhaitez développer une application Desktop pour Windows utilisez plutôt les WinForm C# c'est tellement plus agréable et efficace.

Have fun!

lundi 28 août 2017

Embarcadero déploiement d'une application stand alone pour Windows

Vous avez développé une application en C++ avec Embarcadero et maintenant vous aimeriez qu'elle fonctionne sans devoir copier dans le répertoire d'exécution toutes les DLL nécessaires à l'exécution de l'application.

C'est le genre d'information que l'on peut mettre du temps à trouver dans la documentation alors je vous livre la solution. 

Dans les options du projet allez chercher : Options de projet -> Lieur C++ -> Lier avec la bibliothèque d'exécution Delphi :

bibliothèque d'exécution Delphi et RTL Dynamique

Dans les options de Package : Option de projet->Packages-> Lier avec les packages d'exécution :

Lier avec les packages d'exécution

That's All Folks!

Have fun! Et surtout n'oubliez pas ce n'est que du soft !

vendredi 25 août 2017

MSDN MoveFile the Ultimate Code to Help User to know what happen

This king of function "MoveFile" is well rotten, it's made several times I have to deal with this function I remenber each time it was hell. I don't remenber the solution, so this time I will take a note for all of us.

Why this this function is so rotten, because of error message: "access denied" or "could'nt find file" wich means nothing for the user but the function failed to Move Your Files! And it is hard to find why.

Why in english? Because I did not find any solution really good in all over the documentation around the world.

If you look at his page:

https://msdn.microsoft.com/en-us/library/windows/desktop/aa365239(v=vs.85).aspx

you can see there is a probleme ; there is not enough explainations.

Embarcadero is needed in C++.

There is my code:

#define PATH_BACKUP "C:\\Temp\\"
#define PATH_BACKUP_DIR "C:\\Temp\\Save\\"
#define PATH_DIR_TO_BACKUP "C:\\MyDirectory\\Data\\Save\\"


UnicodeString backupADirectory()
{
    UnicodeString message;
    PrintLog( "backupADirectory(" );

    // If it exist, delete and recreate destination directory
    if ( TDirectory::Exists( PATH_BACKUP_DIR ) )
    {
        TDirectory::Delete( PATH_BACKUP_DIR, true ); // Recursive = true
    }

    // Directory should exist for MoveFile
    if ( TDirectory::Exists( PATH_BACKUP ) == false )
    {
        TDirectory::CreateDirectory( PATH_BACKUP );
    }

    //
    // Moves an existing file or a directory, including its children.
    // From an Existing File to a New File.
    // The New Name must not already exist.
    //
    if ( MoveFile( PATH_DIR_TO_BACKUP, PATH_BACKUP_DIR ) == 0 )
    {
        //
        // If a FileBrowser is open on a directory to backup
        // the message is: Accès refusé
        //

        LPVOID lpMsgBuf;
        FormatMessage
        (
            FORMAT_MESSAGE_ALLOCATE_BUFFER | FORMAT_MESSAGE_FROM_SYSTEM,
            NULL,
            GetLastError(),
            MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT),
            (LPTSTR) &lpMsgBuf,
            0,
            NULL
        );

        string smsg = ( const char* )lpMsgBuf;
        String sMsg = smsg.c_str();
        sMsg = sMsg.SubString( 0, sMsg.Length() - 2 );
        message = UnicodeStringFormat( L"Error Moving files: %s", sMsg ) ;

    }
    else
    {
        message = L"Files Moved";
    }
    return message;
}

Have Fun! And don't forget it's only software.

Embarcadero Templates

Quels sont les templates que l'on peut instancier avec Embarcadero quelles sont leurs structure ? Les prérequis sont d'avoir installé une version de RAD Studio Embarcadero C++.

Et l'on fait : Fichier->Nouveau->Autres...

Templates d'applications
Les Options de la Console

Application VCL « métropolis »

La structure de l'application VCL métropolis :


Structure d'une application VCL Métropolis

Voici donc très rapidement un tour des applications que l'on peut instancier avec Embarcadero. C'est à dire à peu prêt rien. Imaginez le retard pris par les gens qui développent encore avec ce truc.

To Be Continued


CodeSite sous Embarcadero - L'outil ultime de Trace Log

Pour Tracer, Logger, il vous faut trouver le bon outil. En juillet 2015 Embarcadero rachète les composants et le produit CodeSite de Raize Software et nous voilà donc avec très un bel outil de Trace Log dans des File Viewer ou Live Viewer sous Embarcadero, c'est l'outil complet de Traces et Logs.

Accès par le menu:

Embarcadero->Outils->CodeSite

Le CodeSite Controller donne accès à quelques options de configuration de l'outil.

CodeSite Controller

CodeSite Controller

Et donc voici mes première traces en Live dans le Live Viewer :

Le Live Viewer de Code Site sous Embarcadero

L'intégration de cet outil de Trace avec un Viewer est quelque chose de différenciant par rapport à d'autres chaînes de développement qui ne propose absolument pas ce genre de chose aussi pratique.

Fonctionnalités vraiment cool

Always on top :

Fonctionnalité "Always on top" du Live viewer CodeSite sous Embarcadero

Oui, quand vous adoptez cet outil, vous ne pouvez plus vous en passer et il vous le faut sous les yeux en permanence et donc cette fonctionnalité "Always on top" est bien cool.


mercredi 21 juin 2017

On me parle de Embarcadero XE5 en Langage C++ C'est quoi cet environnement ?

J'ai pratiqué le développement RAD (Rapid Application Development) à l'époque avec le produit de Borland qui s'appelait Borland C++ Builder alors Embarcadero XE5 c'est quoi ?

D'ailleurs le net est devenu tellement mauvais, il y traîne de vieux messages poubelles que personne ne supprime et qui polluent. Ainsi en tapant "borland c++ builder 6" vous tomberez sur l'un d'entre eux ... datant de 2014 ! Il me semble bien que Borland C++ Builder n'existe plus ... dans mes souvenirs il était devenu Inprise.

Alors pour "Embarcadero xe5 c++" on me propose la chaîne de développement "en solde" ICI. C'est le premier résultat qui sort, comme c'est payant pour eux je clique ça leur apprendra !

En plus on ne trouve rien sur ce site !

Le deuxième lien semble plus prometteur :


Embarcadero C++ Builder

Compilateur C++ basé sur Clang ? pour windows 32 & 64 bits iOS et Android.

Puis on me propose d'en savoir plus sur la prise en charge du C++ moderne dans C++ Builder

J'y vais ... là on est dans le vif du sujet.

On y retrouve une description de la prise en charge de la norme C++11.

Concernant les contrôles utilisateurs :

MFC vous donne des cauchemars ? Vous trouvez wxWidgets trop basique ? VCL propose une trame incomparable qui encapsule les contrôles natifs Windows et surpasse tous les autres frameworks.

J'aime bien la phrase "MFC vous donne des cauchemars" car c'est le cas. MFC a donné des cauchemars à tous ceux qui ont eu à faire à elle. C'est le librairie des contrôles utilisateur de Microsoft, Microsoft Foundation Class.

VCL c'est pour Visual Component Library, tous les contrôles utilisateurs de la VCL dérivent de TObject. VCL vient du Delphi.

Notes diverses sur embarcadero :

La VCL est incompatible avec FireMonkey (FMX) une autre librairie de composants graphiques.

Concernant les Styles, il est possible de convertir un style pour VLC en style pour FMX.

VLC extends the RTL (Run Time Library) implementation of actions

Donc c'est quoi embarcadero ?

C'est un IDE donc la palette d'objets graphiques est soit du VLC (issu de Delphi) soit du FireMonkey ou les deux combinés.

Pour finir, vous pouvez démarrer  en vous enregistrant pour débuter votre période d'évaluation gratuite :

CX C++ Builder

Maintenant, on sait ce qu'est Embarcadero ! Concernant XE5 c'est une ancienne version de cet environnement.

Et pour la suite le Tuto c'est Ici.

Have fun !

C++11 - Qu'apporte cette nouvelle norme du Langage en 2011 ?

Standard for programming language C++ approved by International Organization for Standardization (ISO) on 12 August 2011, replacing C++03,[1] superseded by C++14 on 18 August 2014[2] and later, by C++17, which is still under development.

C++11, introduit le mot-clef thread_local pour déclarer qu'une variable doit être stockée dans une zone mémoire appartenant au thread.

- Modificateur volatile

- Délégation du constructeur
En C++11 un constructeur de classe peut appeler un autre constructeur de cette même classe se qui simplifie le code.

- Héritage du constructeur

- Les Templates

- Les Templates variadiques
comme les fonctions variadiques du C (avec un nombres d'arguments non connu à l'aide de va_list et aux macros va_start(), va_arg() et va_end() de <stdarg.h>)
exemple : la classe tuple

- Assertions statiques
static_assert(sizeof(long) > sizeof(int));
permettrait à une bibliothèque d'être certaine qu'elle est compilée sur un système vérifiant cette condition (x86-64 par exemple).

- Inférence de types
le mot clef auto se voit assigner une nouvelle sémantique
- avant : variable auto : valide seulement dans l'espace où elle est déclarée (comme c'est le comportement par défaut ce mot clef était inutile)
- maintenant une variable déclarée de type auto doit impérativement être initialisée
exemple:
auto f = boost::bind(MyFunc, _1);
f(5);
trouver le type d'objet du résultat d'un bind n'est pas facile d'ou le type auto

decltype permet de typer une variable à partir du type d'une autre variable
Exemple :
int i;
decltype(i) j = 5;


- Sémantique move()

En C++, il n'y a aucun moyen de déplacer un objet sans le copier. Ainsi la fonction swap :

template <class T>
void swap ( T& a, T& b )
{
  T c(a);
  a=b;
  b=c;
}

Appelle d'abord le constructeur de recopie puis deux assignations c'est donc trois copies au total.
C++11 introduit la fonctions std::move() dont le patron est le suivant :

template <class T>
typename remove_reference<T>::type&&
move(T&& a)
{
    return a;
}

L'objet d'origine peut être modifier à partir du résultat de la fonction move() et swap peut être réécrite de façon plus concise :

template <class T>
swap(T& a, T& b)
{
    T tmp(std::move(a));
    a = std::move(b);
    b = std::move(tmp);
}

- Énumérations fortement typées

- Pointeur NULL
en C : #define NULL ((void*)0) est impossible en C++ ne peut pas servir pour un pointeur de type différent de void*
création de nullptr qui a la particularité de pouvoir être assigné à tous types de pointeurs. On pourra écrire :

T* ptr = nullptr;

- Threads
implémentation de la bibliothèque boost.

- Type Tuple
Collection de dimensions fixe d'objets de types différents

https://fr.wikipedia.org/wiki/C%2B%2B11

C++14

On dit souvent du C++14 que c'est avant tout la correction des beugs du C++11. Mais il y a aussi des nouveautés.

- Littéraux binaires préfixe 0b ou 0B
int nb = 0b11;
std::cout << nb << std::endl; // sortie de l'application : 3

- Séparateurs de chiffres 
Pour facilité la lecture :
int un_milliard = 1'000'000'000;

https://fr.wikipedia.org/wiki/C%2B%2B14

Pour aller plus loin de bons exemples avec :

Zeste de savoir - Le C++14 est arrivé

 

mardi 20 juin 2017

Visual Studio 2017 for C++

Que pouvons nous faire avec Visual Studio 2017 en Langage C++ ? C'est la question à laquelle je vais essayer de répondre ...

Installation C++ pour Visual Studio 2017

Lancer l'exe d'Installation de Visual Studio 2017 les options concernant le Langage C++ sont là.

Visual Studio 2017 Installation

Choix des composants C++ :

Développement Destop en C++

Et sur le côté le résumé des options :

Développement Desktop en C++

La suite des options :

Développement Desktop en C++ - Suite des options

On y trouve encore les bonnes vielles MFC et l'ATL, ça vous manquait je vois.

To Be Continued!

dimanche 26 mai 2013

Eclipse for C/C++

Vous cherchez à bien démarrer, rapidement à développer en Langage C et C++ sur la plateforme de développement Eclipse. Nous allons voir ce qu'il faut faire.

https://www.eclipse.org/
Eclipse Foundation

Eclipse Download

http://www.eclipse.org/downloads/
Eclipse for C/C++ Windows 32bits 131 Mo

By a book :
http://pothi.com/pothi/book/ebook-meera-ghumalia-cc-software-development-eclipse

Eclipse Juno Documentation
http://help.eclipse.org/juno/index.jsp

Once you installe Double clic on :
\\eclipse-cpp-juno-SR2-win32\eclipse\eclipse.exe

Message de l'exécutable :
A Java Runtime Environment (JRE) or a Java Development Kit (JDK) must be available in order to run Eclipse

Eclipse Installation JRE

Depending on what you want to do with Eclipse. If you intend to use Eclipse for Java development, then you should install a JDK

I will work with Windows, so I install JRE.

http://wiki.eclipse.org/Eclipse/Installation#Install_a_JVM

Vérification de la machine Java Installée

http://java.com/fr/download/installed.jsp

(Version 7 Update 21).

Lancer l'exécution de eclipse.exe

choix du workspace : C:\Documents and Settings\Administrateur\workspace

Create New Project

Création d'un projet GCC Cross Compilation :

C:\Documents and Settings\Administrateur\workspace\Hello World C++ Project Cross GCC

Oups !

Description Resource Path Location Type
Symbol 'cout' could not be resolved Hello World C++ Project Cross GCC.cpp /Hello World C++ Project Cross GCC/src line 13 Semantic Error
Program "g++" not found in PATH Hello World C++ Project Cross GCC [Discovery Options] page in project properties C/C++ Problem
Symbol 'endl' could not be resolved Hello World C++ Project Cross GCC.cpp /Hello World C++ Project Cross GCC/src line 13 Semantic Error
Program "make" not found in PATH Hello World C++ Project Cross GCC C/C++ Problem
Symbol 'std' could not be resolved Hello World C++ Project Cross GCC.cpp /Hello World C++ Project Cross GCC/src line 10 Semantic Error
Program "gcc" not found in PATH Hello World C++ Project Cross GCC [Discovery Options] page in project properties C/C++ Problem

Création d'un projet Microsoft Visual C++ :

C:\Documents and Settings\Administrateur\workspace\Hello World Microsoft Visual C++

Oups !

Description Resource Path Location Type
LNK1104: cannot open file 'kernel32.lib' Hello World Microsoft Visual C++ line 0 C/C++ Problem


Oulala ça pique un peu Eclipse ...
 

vendredi 24 mai 2013

Design Patterns en C++

Vous recherchez des Design Patterns écrits en C++, nous allons voir ensemble ce que l'on peut trouver sur ce sujet primordial du Langage C++. Les Design Patterns sont un sujet important lorsque l'on veut passer d'un développement artisanal à un développement professionnel.

Comment faut-il utiliser les design patterns ? Les plus sages diront qu'il ne faut surtout se jeter dessus pour en mettre partout. Il faut les utiliser avec parcimonie uniquement lorsque cela est utile pour l'architecture de votre code.

C'est pour cela qu'il faut bien connaitre les Design Patterns et savoir quand les utiliser à bon escient.

WikiBooks - C++ Programming/Code/Design Patterns

En Anglais sur le site wikibooks :

WikiBooks - C++ Programming: Code patterns design

Présentation très complète des patterns en C++, avec à chaque fois, le code en C++ : une mine d'or ! Une référence.

Trois grands types de Patterns

Creational Patterns
Structural Patterns
Behavioral Patterns

Developpez.com - Design Patterns en C++

Sur le site Developpez.com

Développez.com - Présentation des principaux design patterns en C++

Prototype : Class dont le but est d'être clonée
Créer un tas de gros objets (en taille mémoire) peut créer des problèmes de performance de l'application.
Il dispose d'une méthode obligatoire : Clone()

std::auto_ptr : cette class est obsolète en C++11. La nouvelle class est unique_ptr qui supprime automatiquement l'objet qu'il pointe.

Singleton : Assurer l'existence d'une seule instance de certaines Class
exemple d'un driver de son qui ne doit être instancié qu'une fois
en C++ on utilisera le Template Class

Factory : ou fabrique en français classe dont le rôle est de créer d'autres objets.

Décorateur : permet d'étendre dynamiquement le rôle d'une classe de base

Observateur : être prévenu lors de changement d'une donnée

Stratégie : pattern permettant de changer d'algorithme utilisé de façon dynamique.

Source Making Design Patterns

Un site très complet sur le développement logiciel UML, Design Patterns, AnitPatterns, Refactoring :

SOURCE MAKING - Design Patterns

Des exemples graphiques amusants ... des implémentation dans les différents langages vraiment complet. 

Et la définition des AntiPattern. Lorsque l'on s'intéresse de prés aux design patterns autant savoir de qu'est un anti-pattern.

Refactoring Gurru - Design Patterns

Je ne connaissais pas, il y a toujours de nouveaux arrivants qui se mettent dans le game des design patterns, voici :

Refectoring guru - Design Patterns in C++

Le truc sympathique c'est la représentation graphique des design patterns ce qui permet, lorsqu'on les connait un peu, de les retrouver facilement et comprendre à quoi elles servent d'un coup d'oeil. Les exemples de code en C++ sont très bien présentés. C'est très bien fait.


Les évolutions du Langage C++

MSDN de Septembre 2011, étrange ? Le moins que l'on puisse dire c'est que la  société de Redmond ne respecte pas totalement les normes du Langage C++ en ayant parcouru parfois la doc MSDN c'est souvent parce que Microsoft avait proposé une solution pour adresser un problème, solution qui n'a pas été choisie par la norme du coup Microsoft n'a pas fait l'effort de s'adapter mais a conservé "ses vieux trucs".

New Language Features in Visual C++

La copie d'écran est là pour témoigner car depuis cette documentation sur les évolutions du Langage C++ a été retirée.

But it's not the best practices, they can be founded here.

Étrange, s'agit-il d'un ajout au C++ spécifique au compilateur de Microsoft ? En effet, cela ne concerne les caractéristiques du compilateur Visual C++ 2005.

En tous cas le meilleur site pour connaitre les évolutions du Langage C++ c'est : cppreference.com

Les évolutions du Langage C++ sur le site cppreference.com

En face des rubriques, vous pouvez voir les références aux différentes du C++  de C++14 à C++23.