Birçok benzer soru var gibi başlık tanıdık geliyor biliyorum, ama sorunun farklı bir yönünü soruyorum (yığın üzerinde şeyler var ve yığın üzerine koymak arasındaki farkı biliyorum).
Java'da her zaman "yerel" nesnelere başvuruları döndürebilirim
public Thing calculateThing() {
Thing thing = new Thing();
// do calculations and modify thing
return thing;
}
C ++, benzer bir şey yapmak için 2 seçenek var
(1) Bir nesneyi "döndürmem" gerektiğinde referansları kullanabilirim
void calculateThing(Thing& thing) {
// do calculations and modify thing
}
O zaman böyle kullan
Thing thing;
calculateThing(thing);
(2) Veya dinamik olarak ayrılmış bir nesneye bir işaretçi döndürebilirim
Thing* calculateThing() {
Thing* thing(new Thing());
// do calculations and modify thing
return thing;
}
O zaman böyle kullan
Thing* thing = calculateThing();
delete thing;
İlk yaklaşımı kullanarak hafızayı elle boşaltmak zorunda kalmayacağım, ama bana göre kodun okunmasını zorlaştırıyor. İkinci yaklaşımla ilgili sorun, hatırlamak zorunda kalacağım delete thing;
, ki bu hoş görünmüyor. Kopyalanan bir değeri döndürmek istemiyorum çünkü verimsiz (sanırım), işte sorular geliyor
- Üçüncü bir çözüm var mı (değerin kopyalanmasını gerektirmez)?
- İlk çözüme bağlı kalırsam herhangi bir sorun var mı?
- İkinci çözümü ne zaman ve neden kullanmalıyım?