第107章 std::pmr::polymorphic_allocator ( C++17 )

 前の項目を引き続きで std::pmr::polymorphic_allocator を説明していきます。

 まずはあらためて宣言となります。

// <memory_resource>
template< class T >
class polymorphic_allocator;

 それとコンストラクターは以下のようなものがあります。

polymorphic_allocator() noexcept;
polymorphic_allocator( const polymorphic_allocator& other ) = default;
template< class U >
polymorphic_allocator( const polymorphic_allocator<U>& other ) noexcept;
polymorphic_allocator( memory_resource* r);

 この中で重要なのは一番下の memory_resource のポインターが引数なやつです。

 polymorphic_allocator の多体性(ポリモーフィズム)は抽象クラスである memory_resource へのポインター( _M_resource )を持つってことで確保されてます。

 つまり抽象クラスである memory_resource の継承クラスを渡しても問題ないってことです。

 さらに言えば STL コンテナにポリモーフィックアロケーターを指定したとしても、std::pmr::polymorphic_allocator であるため、 STL から隠蔽されていて memory_resource の実装は見えないってことですね。

Copyright 2018-2019, by Masaki Komatsu