
On Wed, 2008-04-23 at 15:18 -0400, Frank Mori Hess wrote:
If you initialize in the constructor, you have to always create a deleter_wrapper. Currently, one is only created if you need it. I'd guess you would find the current behavior preferrable.
OK, thanks for clarifying.
It's fine.
OK, committed.
For the vtable, we could remove it by switching shared_from_this from a member function to a free function that takes T* as a parameter, but that's of course a breaking change...
Didn't you propose something before like implementing the current esft interface as a derived class from a vtable-free base class that uses the free function approach? The last thing I saw from Peter about that was it needed to maintain compatibility.
Peter raised a valid concern about compatibility with TR1 and C++0x. I pointed out that C++0x is not yet standardized, so this is our chance to improve the interface. std::tr1::esft<T> could be derived from std::esft (note, no template). Likewise for boost::tr1::esft<T> and boost::esft. Of course the TR1 implementation needs an additional T* (in my optimized 1.35.0 esft version) or a vtable (in your trunk version), so only the non-TR1-version would benefit. As it has already been pointed out that the implementation should not drive the interface, I'd like to point out that the interface should not *force* some overhead without a good reason (IMHO). I attached an (untested) wrapper for tr1, just in case someone is interested in seeing some code... Regards, Daniel