Может ли boost :: smart_ptr использоваться в стандартных контейнерах? - PullRequest
6 голосов
/ 22 января 2011

Может ли boost :: smart_ptr, такой как scoped_ptr и shared_ptr, использоваться в контейнерах std, таких как std :: map?

class SomeClass
{
    std::map<int,boost::scoped_ptr<SomeOtherClass> > a_map;
};

Поскольку boost :: smart_ptr может использоваться для полиморфизма , верно ли это и в этом случае? Будет ли уничтожение контейнера вызывать правильное уничтожение подклассов?

1 Ответ

20 голосов
/ 22 января 2011

scoped_ptr не может использоваться в стандартных контейнерах, поскольку его нельзя скопировать (что требуется интерфейсами контейнеров).Однако можно использовать shared_ptr.

Если вы не можете использовать C ++ 11 и уже используете boost, рассмотрите контейнеры-указатели , которые будут работать несколько лучше, чемконтейнер общих указателей.

Если вы используете C ++ 11, рассмотрите контейнер unique_ptr, который должен работать аналогично контейнерам указателей boost.

...