В основном у меня странная проблема, у меня есть структура Node, которая наследуется от контрструктуры. И в структуре счетчика у меня есть эта проверка, чтобы "убедиться", что Destructor вызывается только на выделенной памяти и что он вызывается только один раз.
static atomic < int > check;
counter()
{
check=42;
//...
}
~counter()
{
if (check!=42)
{
cout<<"ouch"<< typeid(T).name()<<" "<< check<<" "<< objects_created<< endl;
sleep(1);
assert(0);
}
check=84;
//...
}
и он ломается при компиляции с g ++ 4.6
3 0x00007ffff65ec7a4 in counter<Node>::~counter (this=0x614c60,
__in_chrg=<value optimized out>)
at /home...
4 0x00007ffff65e7a4d in Node::~Node (this=0x614c60,
__in_chrg=<value optimized out>)
at /home...
5 0x00007ffff6603cf2 in std::_Destroy<Node> (__pointer=0x614c60)
at /usr/include/c++/4.6/bits/stl_construct.h:92
6 0x00007ffff6600004 in std::_Destroy_aux<false>::__destroy<Node*> (
__first=0x614c60, __last=0x614d40)
at /usr/include/c++/4.6/bits/stl_construct.h:102
7 0x00007ffff65fa003 in std::_Destroy<Node*> (__first=0x614c60,
__last=0x614d40) at /usr/include/c++/4.6/bits/stl_construct.h:125
8 0x00007ffff65f2a4f in std::_Destroy<Node*, Node> (__first=0x614c60,
__last=0x614d40) at /usr/include/c++/4.6/bits/stl_construct.h:151
9 0x00007ffff65ecfb2 in std::vector < Node, std::allocator < Node>
>::~vector (
this=0x7ffff68329f8, __in_chrg= < value optimized out>)
at /usr/include/c++/4.6/bits/stl_vector.h:348