samedi 4 février 2017

shared_ptr unexptected behaviour

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