I can't sort out why __release_shared() called in my case.
template<class _Tp>
shared_ptr<_Tp>::~shared_ptr()
{
if (__cntrl_)
__cntrl_->__release_shared();
}
bool AbstractSource::initialize()
{
const std::shared_ptr<AbstractProvider> provider(provide());
// segfault vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv
std::shared_ptr<AbstractFactory> factory(provider->makeFactory());
// segfault ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
std::shared_ptr<Extension> extension(new Extension(provider));
return factory->create(extension);
}
const std::shared_ptr<AbstractProvider> ODBCSource::provide() const
{
std::shared_ptr<ODBCProvider> retval(new ODBCProvider(_connection_string, ODBC::ConnectionTargetType::ConnectionString));
retval->connect(_username, _password)
return retval;
} // here debugger goes to ~shared_ptr
This is the basic staff but seems to me that I don't understand the concept. What I'm doing wrong? Why my shared_ptr has been released?
Aucun commentaire:
Enregistrer un commentaire