Nouvelles fonctionnalités C ++ 11 = supprimer et = par défaut

Nouvelles fonctionnalités C ++ 11 = supprimer et = par défaut

De: http://www.wazhlh.com/?post=7

Les classes C ++ ont quatre types de fonctions membres spéciales, qui sont: le constructeur par défaut, le destructeur, le constructeur de copie et l'opérateur d'affectation de copie.

1. La fonction par défaut dans la classe

Constructeur
par défaut Destructeur
par défaut Constructeur de copie
par
défaut Fonction d'affectation de copie par défaut Constructeur de
déplacement par défaut Fonction d'affectation de déplacement par défaut
2. Fonctions d'opération personnalisées dans la classe

operator
operator &
operator &&
operator *
operator->
operator -> *
operator new
operator delete
[= default] Le mot-clé
C ++ stipule qu'une fois qu'une classe implémente une version personnalisée de ces fonctions, le compilateur ne produira plus automatiquement la version par défaut. Notez que la version par défaut n'est pas générée automatiquement. Bien entendu, la version par défaut peut être générée manuellement. Lorsque nous définissons le constructeur avec des paramètres, il est préférable de déclarer la version sans paramètres pour terminer l'initialisation de la variable sans paramètres. À ce stade, le compilateur ne fournira plus automatiquement la version par défaut sans paramètres. Nous pouvons contrôler la génération du constructeur par défaut en utilisant le mot-clé default et demander explicitement au compilateur de générer la version par défaut de la fonction. Par exemple:

class Preson
{
    
    
public:
	Preson(int a);
	~Preson();
};
 
Preson A; // 就会报错 类不存在默认的构造函数

Remarque: ne peut apparaître que dans le constructeur par défaut, copier et déplacer le constructeur, copier et déplacer l'opérateur et le destructeur de copie

class Preson
{
    
    
public:
	Preson() = default;
	Preson(int a);
	~Preson();
};
 
Preson A; // ok

[= supprimer] Mots clés
Parfois, nous voulons limiter la génération de fonctions par défaut. En règle générale, l'utilisation de constructeurs de copie est interdite. La pratique passée consiste à déclarer le constructeur de copie comme privé et à ne pas fournir d'implémentation, de sorte que lorsque l'objet est copié, la compilation ne peut pas passer et C ++ 11 utilise le mot-clé delete pour demander explicitement au compilateur La version par défaut de la fonction n'est pas générée.

class Preson
{
    
    
public:
	Preson() = default;
	Preson(int a) = delete;
	~Preson();
};
 
Preson a; // ok
Preson b = new Preson(10); // err 无法引用 Preson::Preson(int a)

Remarque: dans C ++ 11, le mot clé delete peut être utilisé dans n'importe quelle fonction, pas seulement limité aux fonctions membres de classe

class Preson
{
    
    
public:
	Preson() = default;
	Preson(int a) = delete;
	~Preson();
 
	void sayHello(int a) = delete;
	void sayHello(char a);
	void sayHello(std::string a) = delete;
};
 
Preson* p = new Preson();
p->sayHello(10); // err
p->sayHello('a'); // ok
p->sayHello("hello"); // err

Je suppose que tu aimes

Origine blog.csdn.net/wowocpp/article/details/114255645
conseillé
Classement