Ce n'est un constructeur de retour?
Ma question est qu'est un constructeur de retour? Cette question n'est pas très différent de "qu'est-Ce que le type de retour d'un constructeur?"
J'ai lu quelque part qu'un constructeur retourne un objet complet implicitement (j'.e implicite type de retour est le nom de la classe), mais il ne doit pas être spécifié explicitement.
struct empty{};
int main(){
empty(); //creates a temporary and implicitly a constructor is called
}
Donc, selon mon interprétation de l'implicite type de retour doit être le nom de la classe, dans ce cas empty
. Est mon sauvage interprétation correcte?
Ainsi, lorsque vous appelez
Connexes : stackoverflow.com/questions/3598833/...
Retiré de la
new Class();
, elle renvoie un pointeur vers l'emplacement de cette instance de la classe. Est-ce que vous parlez?Connexes : stackoverflow.com/questions/3598833/...
Retiré de la
c++-faq
tag. Veuillez discuter si vous êtes en désaccord.OriginalL'auteur Invisible Hulk | 2010-11-23
Vous devez vous connecter pour publier un commentaire.
Un constructeur ne retourne rien. Un constructeur est appelé pour initialiser un objet. Un constructeur ne peut être utilisée pour initialiser un objet; vous ne pouvez pas appeler un constructeur explicite (pour une chose, les constructeurs n'ont pas de noms).
Dans l'exemple que vous donnez,
empty()
n'est pas un appel à une fonction d'expression, c'est la valeur d'initialisation. Il crée une valeur initialisée objet temporaire de typeempty
.Ajoutant à "vous ne pouvez pas appeler un constructeur" - parfois, il ya une raison de vouloir construire un objet en mémoire qui a déjà été alloué. L'idée d'un appel explicite à un constructeur peut être attrayant, mais en fait, même cela ne fonctionne pas. La "mise en place de la nouvelle" syntaxe est utilisée à la place. Si une légère asymétrie, l'action de nettoyage qui vient en complément de ce (destruction de l'objet, mais ne pas libérer la mémoire) est un destructeur explicite d'appel - pas un "placement supprimer".
Une réflexion supplémentaire - dans le constructeur (comme avec toute méthode) l'objet est référencé par le
this
paramètre implicite. Le pointeur vers l'instance (ou plutôt de la mémoire non initialisée) est passé en, pas retournés. Bien sûr, les références viathis
sont généralement implicite que le paramètre lui-même.Ce sujet Terminator().dire();. Ressemble référence à l'objet créé pour moi. Sorte de...
Oui. Il construit un temporaire de Terminaison d'objet, les appels Terminator::dire() sur cet objet temporaire, détruit alors que l'objet temporaire. Les objets temporaires ne sont pas détruits jusqu'à la fin de la pleine expression dans laquelle ils ont été construits.
OriginalL'auteur James McNellis
construire retourne quelque chose. elle retourne la référence à l'objet qui
this
points. de sorte que le rendement implicite déclaration d'un constructeur ressembleComment est-ce utilisé?
Si vous créez un modèle de classe de
something
avec un "générique" de type en tant que membre, vous appelez la valeur par défaut de zéro constructeur de paramètre de type générique, explicitement (c'est à dire,generic()
) dans le constructeur de votre classesomething
et d'initialiser votre générique de membre via l'opérateur d'affectation et de l'instruction d'initialisation de lasomething
constructeur. Le constructeur doit retourner quelque chose ou de rien de cette merde, j'ai juste écrit serait de travailler. C'est dans le livre que je suis en train de lire...lol.OriginalL'auteur bill
Constructeurs ne retourne rien.
Les constructeurs sont appelés implicitement, tandis que la création d'un objet afin d'initialiser l'objet en cours de création.
MyClass myclass = MyClass();
Il y a des tas de règles spéciales de manutention des initialiseurs. Malheureusement, il n'a rien à voir avec la façon d'obtenir quelque chose comme retourné par un constructeur. Depuis un constructeur de ne même pas avoir un nom (le nom de la classe ici est gérée par des règles spéciales de déclaration plutôt que la fonction d'appel de la postfix-expression), vous n'avez aucun moyen de se référer à son type de sorte que le "type de retour" (le cas échéant) ne fait pas de sens.
OriginalL'auteur Alok Save
Source de confusion:
Beaucoup sont désorientés par le code ci-dessus, ce qui crée un illusion que le constructeur retourne un pointeur vers l'objet nouvellement créé.
Lorsque vous utilisez
new
mot-clé, le compilateur alloue la mémoire nécessaire, puis appelle le constructeur pour créer un nouvel objet sur la mémoire allouée. Puisnew
retourne le pointeur vers ce bloc de mémoire. Le constructeur crée seulement l'objet et ne retourne jamais rien.OriginalL'auteur Siva Prakash
En C++, si je me souviens bien, votre code d'allouer assez d'espace pour un "vide" sur la pile, et ensuite appeler le vide par défaut du constructeur, comme spécifié par l' ()--implicitement en passant un cette référence. Il n'y a pas de retour. Et dans votre cas, il n'y a pas de constructeur.
Comme d'autres affiches,
new
alloue de la mémoire, pas le constructeur.OriginalL'auteur Craig
quoi à ce sujet:
ctor retourne const référence à un emplacement de mémoire (*), vous pouvez éloigner de la const et l'utilisation de son comme un nonconst objet normal comme
empty *e = new e;
empty & er = const_cast<empty &>(empty())
.OriginalL'auteur sree