Aksine, genel bir kural olarak kullanıcı kodunuzda hiçbir zaman yeni / silinmemesi gereken ölçüde, yığın tahsislerini her zaman tercih etmelisiniz.
Dediğiniz gibi, değişken yığın üzerinde bildirildiğinde, yıkıcısı kapsam dışına çıktığında otomatik olarak çağrılır, bu da kaynak ömrünü izlemek ve sızıntıları önlemek için ana aracınızdır.
Dolayısıyla, genel olarak, bellek (yeni arayarak), dosya tanıtıcıları, soketler veya başka herhangi bir şey olsun, bir kaynağı ayırmanız gerektiğinde, onu kurucunun kaynağı aldığı ve yıkıcının serbest bıraktığı bir sınıfa sarın. Ardından, yığın üzerinde bu türden bir nesne oluşturabilirsiniz ve kaynağınızın kapsam dışına çıktığında serbest kalacağı garanti edilir. Bu şekilde, bellek sızıntılarından kaçınmanızı sağlamak için yeni / sil çiftlerinizi her yerde izlemeniz gerekmez.
Bu deyimin en yaygın adı RAII'dir.
Ayrıca, özel bir RAII nesnesinin dışında yeni bir şey ayırmanız gerektiğinde, ortaya çıkan işaretçileri nadir durumlarda sarmak için kullanılan akıllı işaretçi sınıflarına bakın. Bunun yerine işaretçiyi bir akıllı işaretçiye iletirsiniz, bu daha sonra ömrünü örneğin referans sayma yoluyla izler ve son referans kapsam dışına çıktığında yıkıcıyı çağırır. Standart kitaplık, std::unique_ptr
basit kapsam tabanlı yönetime sahiptir ve std::shared_ptr
paylaşılan sahipliği uygulamak için saymaya başvurur.
Birçok eğitici, ... gibi bir parçacığı kullanarak nesne somutlaştırmayı gösterir.
Öyleyse keşfettiğiniz şey, çoğu öğreticinin berbat olduğu. ;) Öğreticilerin çoğu, gerekli olmadığında değişkenler oluşturmak için new / delete çağırmak ve ayırmalarınızın ömrünü takip etmekte zorlanmanıza neden olmak dahil olmak üzere size kötü C ++ uygulamaları öğretir.