L'utilisation de std::list
prenant en charge la sémantique de déplacement à titre d'exemple.Réduction de l'affectation d'un objet temporaire à la construction en place
std::list<std::string> X;
... //X is used in various ways
X=std::list<std::string>({"foo","bar","dead","beef"});
La façon la plus simple pour le compilateur de faire l'affectation depuis C++ 11 est:
- destroy
X
- construire
std::list
- mouvement
std::list
àX
Maintenant, le compilateur n'est pas autorisé à faire f uite à la place:
- destroy X
- contruct
std::list
en place
car si cela permet d'économiser évidemment une autre memcpy
il élimine la cession. Quel est le moyen pratique de rendre un deuxième comportement possible et utilisable? Est-il prévu dans les futures versions de C++?
Je pense que C++ ne permet toujours pas, sauf avec l'écriture:
X.~X();
new(&X) std::list<std::string>({"foo","bar","dead","beef"});
Ai-je raison?
Pour ceux qui ne savent pas ce que QList fait, pourquoi ne pas utiliser std :: list comme exemple. –
@latedeveloper: Parce que 'QList' est un tableau de pointeurs, alors que' std :: list' est une liste chaînée. Ce sont des types très différents, avec des propriétés d'allocation différentes. –
@NicolBolas: 'QList' est utilisé de façon purement démostrative, ses propriétés importent peu. Leur point est valide. –