Heart, bir struct'a pointer olan LPHEART typedef'ini kullanır.
heart_new fonksiyonuna bir göz atalım:

Görüldüğü gibi, bu fonksiyon LPHEART için bellek tahsis etmek amacıyla calloc çağrısını kullanıyor. Ancak burada ciddi bir problem var: Bu bellek hiçbir zaman serbest bırakılmıyor!
Peki, bu gerçekten bir hata mı? Belleği temizlemek için bir mekanizma var mı?
Bir dakika… heart_delete adında bir fonksiyonumuz mevcut!
Evet, var ama hiçbir yerde çağrılmamış.
Bu sayede, bellek doğru zamanda otomatik olarak serbest bırakılacak ve olası bellek sızıntılarını önlemiş olacağız.
libthecore -> heart.h:
c++:
libthecore -> heart.cpp:
c++:
Artık heart_delete fonksiyonuna ihtiyacımız olmadığı için bu fonksiyonu silebilirsiniz.
heart_new fonksiyonuna bir göz atalım:

Görüldüğü gibi, bu fonksiyon LPHEART için bellek tahsis etmek amacıyla calloc çağrısını kullanıyor. Ancak burada ciddi bir problem var: Bu bellek hiçbir zaman serbest bırakılmıyor!
Peki, bu gerçekten bir hata mı? Belleği temizlemek için bir mekanizma var mı?
Bir dakika… heart_delete adında bir fonksiyonumuz mevcut!
Evet, var ama hiçbir yerde çağrılmamış.
Potansiyel Çözüm
Manuel olarak heart_delete çağırmak yerine, LPHEART için otomatik bellek yönetimi sağlayan bir smart pointer (akıllı işaretçi) kullanalım.Bu sayede, bellek doğru zamanda otomatik olarak serbest bırakılacak ve olası bellek sızıntılarını önlemiş olacağız.
libthecore -> heart.h:
c++:
// Öncelikle raw pointeri shared ile değiştirelim
typedef struct std::shared_ptr<HEART> LPHEART;
libthecore -> heart.cpp:
c++:
// heart_new fonksiyonundan bu değişkeni silin:
LPHEART ht;
// Bu satırı:
CREATE(ht, HEART, 1);
// Bu şekilde düzenleyin:
auto ht = std::make_shared<HEART>();
Artık heart_delete fonksiyonuna ihtiyacımız olmadığı için bu fonksiyonu silebilirsiniz.



