On 11/11/2010 03:11 AM, Amos Jeffries wrote:
> On Wed, 10 Nov 2010 17:05:16 +0200, Tsantilas Christos
>>
>> * Introduce the TidyPointer class similar to std::auto_ptr, which
>> implements a pointer that deletes the object it points to when the
>> pointer's owner or context is gone. It is designed to avoid memory
>> leaks in the presence of exceptions and processing short cuts.
>
> So whats different about this new pointer type that the existing
> std:auto_ptr, RefCount::Pointer and CbcPointer are all insufficient?
The TidyPointer is completely different than RefCount and CbcPointers.
It is similar to the std::auto_ptr but allow developer to define the
deallocator method for the object it points to.
Also does not implement the "=" operator and prevents developers from
using the copy constructor.
It can be usefull when you have code as the following:
-----------------------
A *a= newA();
if (!a)
return NULL;
B *b=newB();
if (!b) {
freeA(a);
return NULL;
}
C *c=newC();
if (!c) {
freeA(a);
freeB(b);
return NULL;
}
If(problem){
freeA(a);
freeB(b);
freeC(c);
return NULL;
}
return C;
Using TidyPointer the above can be written as:
TidyPointer<A> a(newA(),freeA);
if (!a)
return NULL;
TidyPointer<B> b(newB(),freeB);
if (!b)
return NULL;
TidyPointer<C> c(newC(), freeC);
if (!c)
return NULL;
if (problem)
return NULL;
return C.release();
Can help you to avoid memory leeks when you have the following case:
A *a= newA();
DoSomeWorkWhichMayThrow(a);
freeA(a);
In the above case if the DoSomeWorkWhichMayThrow() throws the a object
will never be released.
The above can be written:
TidyPointer<A> a(newA(),freeA);
DoSomeWorkWhichMayThrow(a.get());
>
>> From what I've heard of the SSL problems they are all cause by it not
> using RefCount on the contexts themselves.
>
Maybe RefCount is usefull for the SSL_CTX objects. But I do not think it
is required.
In most cases using the openSSL library you have code like the following:
a=NewA();
b=newB(a);
if (!b) {
freeA(a);
}
else {
//Just forget the a
}
I these cases the TidyPointer is very useful.
Regards,
Christos
Received on Thu Nov 11 2010 - 10:38:14 MST
This archive was generated by hypermail 2.2.0 : Thu Nov 11 2010 - 12:00:09 MST