Czy ktoś może powiedzieć dlaczego to co jest niżej nie działa tak jak powinno?
#include <cstdio>
class CBase
{
public:
CBase()
{
printf("CBase::CBase()\n");
}
virtual ~CBase()
{
printf("CBase::~CBase()\n");
this->Destroy();
}
virtual void Destroy()
{
printf("CBase::Destroy()\n");
}
};
class CChild : public CBase
{
public:
CChild()
{
printf("CChild::CChild()\n");
}
virtual ~CChild()
{
printf("CChild::~CChild()\n");
}
virtual void Destroy()
{
printf("CChild::Destroy()\n");
}
};
int main()
{
printf("a\n");
CChild a;
printf("b\n");
CBase* b = new CChild;
delete b;
return 0;
}
Logicznie rzecz biorąc powinno się wykonać Destroy z klasy CChild, ale tak się nie dzieje:
shared_ptr
std::make_shared
, gwarantuje tylko jedną alokację.