Is deze methode om een ​​tekenreeks uit een functie geheugenbeschadiging te veroorzaken?

Ik wil graag een functie zodanig definiëren dat ik een tekenreeks en een booleaanse waarde retourneer die aangeeft of het resultaat geldig is. Zoals dit:

bool getStringOrTimeout(String *s) {
  ...
  if (timed_out) {
    return false;
  } else {
    *s = String();
    return true;
  }
}

Gaat dit een geheugenprobleem veroorzaken, omdat de tekenreeks wordt toegewezen aan de stapel en de toewijzing wordt ongedaan gemaakt wanneer deze het bereik verlaat, of is dit goed?

0
U hoeft de String-constructor daar niet te gebruiken. Je had net zo gemakkelijk kunnen zeggen: * s = "foo";
toegevoegd de auteur Nick Gammon, de bron

1 antwoord

Je kunt beter de string doorgeven door te verwijzen, zoals deze:

bool getStringOrTimeout(String & s)
{
  if (timed_out)
    return false;
  s = "foo";
  return true;

}

Dat betekent dat de beller -reeks zal worden gewijzigd. En je hoeft niet langer een wijzer naar een string door te geven.

1
toegevoegd