Normal C++ tasarımında, çoğu nesne delete
bildirimi, free
işlevi veya free
numaralı kitaplığa özgü eşdeğeri ile silinebilir. Bu gibi nesneler için, unique_ptr
Deleter
uygulaması, Boş Temel Sınıf Optimizasyonu aracılığıyla elimine edilen durum bilgisi olmayan bir nesne olabilir. Bununla birlikte, bazı kitaplıklar, bu kitaplıktaki nesneleri silmek için başka bir nesneyi (bir işlev işaretçisi veya başka bir içerik içerebilir) kullanmayı gerektirir.unique_ptr deleter ek yükü
typedef struct lib_object lib_object;
struct lib_api {
lib_object (*createInstance)();
void (*freeInstance)(lib_object *o);
};
Bir özel bir Deleter
bir veri elemanı gibi bir lib_api
gösterici depolayarak unique_ptr
bu kaydırmak ama olabilir gereken birden çok lib_object
örneği yönetilmesini ise, örneğin, Bir kapsayıcıda, nesnelerin izlenmesinin bellek yükünü iki katına çıkarırdı. Bu kütüphaneyle uğraşırken RAII prensiplerini korumak için ne tür bir model kullanılabilir, ancak hafızada etkin kalır mı?
"lib_api *', deleter sınıfının statik bir üyesini yapabilir misiniz? – Brian
"freeInstance" ı kap sınıfının özel türetilmiş sınıfında depolamanız ve kapsayıcınızın 'lib_object *' içermesi gerektiğini düşünüyorum.Türetilmiş sınıfta, her elementte 'freeInstance' diyen yıkıcıyı uygulamak zorundasınız. – Franck