Prenez la fonction suivante comme exemplemeilleur moyen de passer des objets volumineux
string print()
{
return (some string that has been formed);
};
et permet maintenant de dire que cette fonction d'impression formera une chaîne ridiculement grande, qui doit revenir à la fonction qui l'a appelé à partir une autre classe.
Maintenant, dites que cette fonction d'impression peut être appelée des milliers de fois. Y a-t-il un moyen correct et rapide de le faire?
Dans Visual Studio, vous pouvez le faire
void print(string& lines)
{
lines = (some string that has been formed);
};
cependant g ++ ne compilera pas cela, il ne devrait pas être fait de cette façon que cela pourrait être un objet temporaire qui pourrait disparaître à tout instant. D'après ce que je comprends est que je pouvais faire ce
void print(const string& lines)
{
};
si tout ce que je voulais était de récupérer quelque chose dans cette chaîne w/o modifier et de le faire très rapidement. Mais je veux le modifier. Donc, je ne peux pas faire ça.
Ce qui m'amène à la question est de déclarer un nouveau pointeur sur un objet qui sera le moyen le plus rapide de le faire? ou est-ce plus lent? ou est-ce que ça ne vaut pas le coup. à-dire (pas sûr si cela même travail?)
void print(string* lines)
{
string formedString; // the string that has been formed
lines = formedString&;
};
Et enfin, si je suis le chargement objet vers le haut lors de l'exécution, et en les ajoutant à un arbre via:
void add(const ItemType& item)
{
someNode->item = item;
};
Le item
était à l'origine une objet temporairement stocké dans la portée de la fonction appelant ce add()
, donc l'affecterait au nœud provoquer la pile de la fonction d'appel à rester plus longtemps alors voulu? Ou serait-ce OK? Aussi serais-je plus tard en mesure d'éditer item
, ou est-il maintenant coincé comme const?
seulement des questions d'un esprit d'apprentissage :)
Retournez la grande chaîne que vous formez en valeur. – chris
Vous pouvez allouer la chaîne sur heap et renvoyer le pointeur sur la chaîne. OU l'appelant à la méthode pourrait être responsable de passer la méthode un point à l'endroit où la chaîne peut être stockée. L'un ou l'autre est assez rapide. Au fait, ne vous inquiétez pas des performances si votre code n'est pas lent. – Patashu
** La pré-optimisation est la racine de tout mal ** est quelque chose qu'un esprit d'apprentissage devrait tenir compte. – Aesthete