|
Boost : |
From: Gennadiy Rozental (rogeeff_at_[hidden])
Date: 2002-04-27 04:07:05
Hi,
I made some changes to Loki style smart_ptr approximation that located here:
http://groups.yahoo.com/group/boost/files/Policy%20based%20smart_ptr/
Here list of issues addressed:
1. I made generators for stl-like auto_ptr and auto_array
2. I made generators for boost-like scoped_ptr and scoped_array
3. I made generators for boost-like shared_ptr and shared_array
All generators look like this:
namespace boost {
template<class T>
struct scoped_ptr_generator
{
typedef
resource_mnmt::smart_ptr<resource_mnmt::storage::plain_pointer<T>,
resource_mnmt::ownership::non_shareable,
resource_mnmt::disallow_conversion<T*>,
resource_mnmt::no_check
> type;
};
An alternative wouldbe to inherit from this types. I do not know what is
better yet. shared_ptr generator uses traits to automatically deduce type of
reference counting to use. I presume we could use 'has member' facility here
to add more automation.
4. I added intrusive_ref_counted ownership policy.
5. I redesigned checking policies. Now Checking policy specification would
look like this:
check<>::leak<at_compile_time>
::dereference<at_runtime_using_asert>
6. I added some interpolicies convertions (still some missing)
7. I added one more ownership policy
8. More tests added
9. I checked current smart_ptr_test.cpp using my generators. With exclusion
of missing operator[] all test are passing (well, 3 are failing but this is
because I have for smart_ptr<...> v => v.use_count() = 0, while current
implementation gives 1. Is there specific reason why is that? )
10. Since I did not find a solution for templated free function operator==
in general case I rollback to form where if defines comparisons with U
const*. At least it will work for pointers.
My test is passing on MSVC. Could somebody try to test on different
compilers?
Any Comments?
Regards,
Gennadiy.
Boost list run by bdawes at acm.org, gregod at cs.rpi.edu, cpdaniel at pacbell.net, john at johnmaddock.co.uk