J'ai une classe foo
, avec un membre bar
de type std::shared_ptr<int>
:Affectation à une variable membre std :: shared_ptr
class foo
{
std::shared_ptr<int> bar;
/*other stuff here*/
};
Dans cette classe, je veux attribuer un new int
-bar
. Mais je ne peux pas écrire bar = new int();
car le pointeur n'a pas d'opérateur d'assignation publique.
Comment devrait Je le fais? Je pourrais std::move
ou std::swap
mais aucun de ceux semble juste.
J'ai vu votre montage. Est-ce que ce changement initialise toujours le 'int' à 0? 'new new()' would, 'new new' ne le ferait pas. – Bathsheba
'std :: make_shared (new int())' n'est pas valide; 'make_shared' transmet parfaitement les arguments au constructeur' T'. Il est spécifié de construire l'objet en utilisant ':: new (pv) T (std :: forward (args) ...)' donc s'il n'y a pas d'argument, il sera initialisé en valeur. –
TartanLlama
@Bathsheba: C'est vrai, il n'y a pas de formes "non initialisées" de l'une des fonctions 'make_ *'. Je pense que quelque chose comme ça a été proposé une fois (dans le cadre d'une proposition pour autoriser les types de tableaux dimensionnés pour make_ {shared, unique}), et la proposition a été faite avec un formulaire non initialisé make_initialisation. En général, la bibliothèque standard rend très difficile la production de valeurs non initialisées, même si c'est parfois ce dont vous avez besoin ... –