2010-04-27 38 views
6

Argümanı silinen bir functor arıyorum:Herhangi bir standart silme functor var mı?

template<class T> 
struct delete_functor 
{ 
    void operator()(T* p) 
    { 
     delete p; 
    } 
}; 

std, tr1 veya boost'de böyle bir şey var mı?

+1

Bunu kendiniz yazıyorsanız, btw, ardından struct struct_functor {template void operatörü() (T * p) {delete p; }}; ', bir tane oluştururken T'yi belirtmeniz gerekmez. –

+0

@Steve Cool. bilmek güzel! – fredoverflow

cevap

10

C++ 0x std::default_delete'u std::unique_ptr'u desteklemek için standart kitaplığa ekleyecektir.

delete_functor ile aynı işlevselliğe sahiptir, ancak aynı zamanda dizi tipi nesneler için delete[]'u aramak için uzmanlaşmıştır.

+1

Teşekkürler, bir çekicilik gibi çalışır! – fredoverflow

+0

Ne std :: default_delete () 'yapmak? – user1095108

+0

@ user1095108: “Operatör()' başlatılırsa, program hatalı biçimlendirilmiş olur. 'Default_delete' öğesinin başlatıldığı tür, sınıf şablonunun başlatıldığı sırada eksik olabilir, ancak 'operator() 'başlatıldığında tamamlanmalıdır. –

2

Boost.Lambda Benim şirkette boost kullanmak için izin verilmez ve biz ya C++ 11 kullanmıyorsanız delete_ptr and delete_array

+0

Bunu işe alamıyorum. Hangi başlığı eklemek zorundayım? – fredoverflow

+0

'#include ' –

0

sahiptir, bu yüzden bu kullanın:

bence aradığın şey bu.

Ayrıca, dtor_fun_t olarak yeniden oluşturabilir ve "delete _ ptr;" " _ptr-> ~ _Type();" sadece dtoru çağırmak için. Örneğin bir bellek yöneticisi ve yerleştirme kullandığınız durum budur.

İlgili konular