Untuk manajer memori yang saya tulis dalam C++ sebagai bukti konsep, untuk melacak objek yang dialokasikan saya mengalokasikan memori dengan malloc()
dalam suatu fungsi, kemudian mengembalikan pointer ke memori itu dan menggunakan operator penempatan baru. Kemudian, untuk melacak kapan objek tersebut dihapus, saya meneruskan pointer ke fungsi lain untuk memanggil free()
pada pointer.
Namun, karena saya menggunakan free()
dan bukan delete
, konstruktor objek tidak dipanggil secara otomatis seperti biasanya, jadi saya harus memanggilnya sendiri. Selain itu, karena manajer memori dirancang untuk bekerja dengan objek apa pun, dapat dibayangkan (dan bahkan mungkin) bahwa pada suatu saat dalam masa pakainya, ia harus membebaskan objek yang berpotensi memiliki beberapa kelas induk atau berada jauh di dalam pohon warisan.
Solusi awal saya untuk ini adalah dengan memanggil destruktor objek dasar, yang akan memanggil semua destruktor anak (jika pertanyaan ini dapat dipercaya), tetapi karena objek secara harafiah dapat berupa apa saja dan memiliki rangkaian warisan apa pun, tidak ada cara untuk mengetahui kelas dasar yang sebenarnya untuk objek tersebut adalah.
Jadi pertanyaan saya adalah: apakah secara eksplisit memanggil destruktor kelas anak secara otomatis memanggil semua destruktor dasar juga, seperti dengan delete, atau apakah tidak ada cara untuk melakukan ini dengan mudah?