Beste GoT'ers,
Klein vraagje, zie onderstaand stukje code:
Zit er een memory leak in die laatste 3 regels ja of nee?
Maw: wat is de scope van het temp std::string object dat verkregen wordt als resultaat van de o.toString() call?
Bevat de cStr variabele nog een geldige pointer bij het uitprinten?
Ik vermoed dat het volgende gebeurt:
1. std::string wordt teruggegeven by value door o.toString(), dus temp variabele
2. Er wordt een pointer naar de interne string bytes teruggegeven door c_str()
3. Na die lijn wordt de std::string gedealloceerd, en wijst de cStr pointer naar vrijgegeven geheugen.
Juist of niet?
Klein vraagje, zie onderstaand stukje code:
code:
1
2
3
4
5
6
7
8
9
10
11
12
| class SomeObject { public: std::string toString() const { return "string by value"; } } ... SomeObject o; const char* cStr = o.toString().c_str(); std::cout << cStr << std::endl; ... |
Zit er een memory leak in die laatste 3 regels ja of nee?
Maw: wat is de scope van het temp std::string object dat verkregen wordt als resultaat van de o.toString() call?
Bevat de cStr variabele nog een geldige pointer bij het uitprinten?
Ik vermoed dat het volgende gebeurt:
1. std::string wordt teruggegeven by value door o.toString(), dus temp variabele
2. Er wordt een pointer naar de interne string bytes teruggegeven door c_str()
3. Na die lijn wordt de std::string gedealloceerd, en wijst de cStr pointer naar vrijgegeven geheugen.
Juist of niet?