--- In Boost-Users@yahoogroups.com, "Anders Hybertz"
wrote:
Hi
Up to and including version 1.29.0 of the boost library I had an
object which inherited from boost::counted_base, and could
actually
within that object control when it should be deleted. The object
spawned a thread which was listening on a queue, when there was
pushed an shutdown message on the queue, I could safely delete the
object.
In boost 1.30.0 the counted_base changed name and namespace to
boost::detail::sp_counted_base, but the way it works also changed -
so now my object's destructor is called whenever it's going out of
scope - which I don't want.
Any ideas - or should I provide a small sandbox example
Thanks in advance
Anders Hybertz
Just to follow up on my own mail. I have now attached a
small 'almost' complete example which works in boost 1.29.0
------------------------------------------------------------
#include <iostream>
#include
class Test : public boost::counted_base
{
public:
Test() : boost::counted_base( 1, 1 )
{
std::cout << "Test::Test" << std::endl;
// Start the thread
}
void ThreadMethod()
{
bool active( true );
while( active )
{
// active = someQueue.Pop()
}
release();
}
~Test()
{
std::cout << "Test::~Test" << std::endl;
}
};
typedef boost::shared_ptr<Test> TestPtr;
int main(int argc, char* argv[])
{
{
TestPtr spTest( new Test );
}
// Test destructor is not being called even though that it has
left scope
// Stop thread and clean up etc.
return 0;
}
------------------------------------------------------------
The main purpose is that the Test destructor is not called before
the thread actually finishes.
Changing boost::counted_base to boost::detail::sp_counted_base for
boost 1.30.0 does not provide this feature.
Is there another way I cn ensure that the destructor is never being
call - but without modifying the interface, the user should not be
avare of the hidden details.
Thanks in advance
Anders Hybertz