Saya tahu judulnya terdengar akrab karena ada banyak pertanyaan serupa, tetapi saya meminta aspek masalah yang berbeda (saya tahu perbedaan antara memiliki barang-barang di tumpukan dan meletakkannya di tumpukan).
Di Jawa saya selalu bisa mengembalikan referensi ke objek "lokal"
public Thing calculateThing() {
Thing thing = new Thing();
// do calculations and modify thing
return thing;
}
Di C ++, untuk melakukan sesuatu yang serupa saya punya 2 pilihan
(1) Saya dapat menggunakan referensi kapan pun saya perlu "mengembalikan" suatu objek
void calculateThing(Thing& thing) {
// do calculations and modify thing
}
Kemudian gunakan seperti ini
Thing thing;
calculateThing(thing);
(2) Atau saya dapat mengembalikan pointer ke objek yang dialokasikan secara dinamis
Thing* calculateThing() {
Thing* thing(new Thing());
// do calculations and modify thing
return thing;
}
Kemudian gunakan seperti ini
Thing* thing = calculateThing();
delete thing;
Menggunakan pendekatan pertama saya tidak perlu membebaskan memori secara manual, tetapi bagi saya itu membuat kode sulit dibaca. Masalah dengan pendekatan kedua adalah, saya harus ingat delete thing;
, yang tidak terlihat bagus. Saya tidak ingin mengembalikan nilai yang disalin karena tidak efisien (saya pikir), jadi inilah pertanyaannya
- Apakah ada solusi ketiga (yang tidak perlu menyalin nilainya)?
- Apakah ada masalah jika saya tetap pada solusi pertama?
- Kapan dan mengapa saya harus menggunakan solusi kedua?