Jestem obecnie czytając ten poradnik/wyjaśnienie referencji rvalue:Czy wyrażenie "nowa T" określa wartość r lub wartość l?
http://thbecker.net/articles/rvalue_references/section_07.html
W 2 do ostatniego akapitu, autor wspomina, że "argument konstruktora kopii T w ciele fabryki jest lwartość ". Kod on ma na myśli to:
template<typename T, typename Arg>
shared_ptr<T> factory(Arg const & arg)
{
return shared_ptr<T>(new T(arg));
}
Zdaję sobie sprawę, że new T(arg)
konstruuje obiekt T na stercie, ale nie jest zwracana wartość tymczasowa wartość wskaźnika które zostaną utracone, jeśli nie jest używany (co prowadzi do wyciek pamięci, jak sądzę), a zatem wartość r?
EDYCJA: Aby wyjaśnić, rozumiem, że nie będzie wyciek pamięci w tym przykładzie. Chodzi mi o to, że jeśli wartość wskaźnika nie byłaby użyta, nie mielibyśmy dostępu do skonstruowanego obiektu T, a tym samym do wycieku pamięci.
['std :: shared_ptr'] (http://en.cppreference.com/w/cpp/memory/shared_ptr) skutecznie zapewnia __lwartośc_. –
Plik shared_ptr zostanie wyczyszczony, jeśli nie jest już do niego odwoływany. To znaczy. jeśli zwrócisz metodę shared_ptr z metody i nie jest ona używana w kodzie wywołującym, metoda shared_ptr zostanie automatycznie wyczyszczona. – cageman
Myślę, że 'new' zwraca wartość' rvalue', która jest kopiowana do wewnętrznej wartości 'l std :: shared_ptr'. – Galik