std::bind
'un bellek ayırdığı durumları anlamaya çalışırken, bazı sezgiler veren this answer'a baktım, ama daha ayrıntılı bir anlayış istedim, bu yüzden gidip gcc
kaynağına baktım.Kaynakta, gcc'nin std :: copy argümanlarını bir veri yapısına bağlar mı?
C++ standart kitaplığının gcc uygulamasından std::bind
için following source code incelemeyi yapıyorum. F ve parametreler A ve B bir fonksiyon Verilen
/**
* @brief Function template for std::bind.
* @ingroup binders
*/
template<typename _Func, typename... _BoundArgs>
inline typename
_Bind_helper<__is_socketlike<_Func>::value, _Func, _BoundArgs...>::type
bind(_Func&& __f, _BoundArgs&&... __args)
{
typedef _Bind_helper<false, _Func, _BoundArgs...> __helper_type;
typedef typename __helper_type::__maybe_type __maybe_type;
typedef typename __helper_type::type __result_type;
return __result_type(__maybe_type::__do_wrap(std::forward<_Func>(__f)),
std::forward<_BoundArgs>(__args)...);
}
, nerede döndürülen veri yapısı içine kodunu kopyalar bunları bulabilirsiniz, ya da bu derleyici oluşturulur?
Bin d yığından herhangi bir bellek ayırmaya gerek yoktur. –
Bu, bağlantılı cevabın yanlış olduğu anlamına mı geliyor? Ayrıca yığın veya parametreler hala kopyalanmalıdır. – merlin2011
Bana uygun görünüyor.std :: function yığında bir şeyler ayırır (std :: bind dönüş değeri). std :: bind gerek yok. Bağımsız değişkenlerin kopyalandığı nihai yer, "Bind_" sınıfının bir 'tuple _M_bound_args' üyesidir. –