
This paradox seems to be always there. Using Bind or handwritten functors is a compromise between ease of use (and maintenance) and code performance (and code size). One of the main advantages of Bind is the ability to create in-place function objects to avoid the scattered handwritten functors (global class, global functions, static methods, etc.) which will give code maintainers (sometimes the original author himself) more head scratch. In code that is not hotspot or in case memory foorprint is not critical, I think most of peaple will prefer Bind version. B/Rgds Max From: boost-users-bounces@lists.boost.org [mailto:boost-users-bounces@lists.boost.org] On Behalf Of Roman Perepelitsa Sent: Thursday, June 04, 2009 4:35 AM To: boost-users@lists.boost.org Subject: Re: [Boost-users] [shared_ptr] Member functions as deallocators 2009/6/3 OvermindDL1 <overminddl1@gmail.com> Actually, using Boost.Bind will use a lot more memory overall. Would it not be better to create a static function somewhere, something like: class SceneManager { ... static deallocSM(SceneManage *ptr) { ptr->clearScene(); } ... }; And create as: SceneManager *s=fromSomewhere(); boost::shared_ptr<SceneManager> p(s, &SceneManager::deallocSM); Doing this means it only keeps a pointer to the function call, instead of through a bind instantiation, meaning this will execute ever so tiny slightly faster, as well as take less space? It has been a while since I created a new handler like that, but I 'think' the function takes a pointer to the embedded pointer type, check the smart_ptr docs for details I guess. Modern compiler's might surprise you. Always measure performance or look at generated code before resorting to manual optimizations. Roman Perepelitsa.