前の項目を引き続きで 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