1
"動的"メモリを割り当てるための割り当て制限(myC用)を定義します。コンパイル時の配列を持つカスタムアロケータ
マイコード:
template<class T, size_t COUNT>
class SimpleAllocator
{
public:
using value_type = T;
template<class U>
struct rebind
{
using other = SimpleAllocator<U, COUNT>;
};
SimpleAllocator() noexcept
{
}
template<class U, size_t COUNT_U>
SimpleAllocator(SimpleAllocator<U, COUNT_U> const &other) noexcept
{
}
value_type* allocate(std::size_t p_Count)
{
return nullptr;
}
void deallocate(value_type* p_Chunk, std::size_t) noexcept
{
}
T m_Chunks[COUNT];
};
私はスマートポインタ機能で、このアロケータを使用する場合:のstd :: allocate_sharedは、私は、コンパイラのエラーを取得:
error: constructor for 'SimpleAllocator<std::_Sp_counted_ptr_inplace<int,
SimpleAllocator<int, 10>, __gnu_cxx::_Lock_policy::_S_atomic>, 10>' must
explicitly initialize the member 'm_Chunks' which does not have a default
constructor
私はこのエラーを理解するけどそれを解決することはできません。どのように私はこのようなオブジェクトを初期化することができます
std::_Sp_counted_ptr_inplace<int, SimpleAllocator<int, 10>,
__gnu_cxx::_Lock_policy::_S_atomic>
配列を初期化しようとしましたか?あなたはどのようにアロケータクラスを使いますか?あなたは私たちに[最小、完全で、そして証明可能な例](http://stackoverflow.com/help/mcve)を見せてもらえますか? –
さて、私のライブの例(上記参照)は、このガイドラインにすでに達しているはずです。これは最小限の例でエラーを示しています。 * SimpleAllocator *をstd :: allocate_sharedと一緒に使いたいです。他にどんな情報が必要ですか?メモリ位置は、データセグメント内にあってはならず、μC内部での使用のためにヒープ内部に割り当てられてはなりません。 – Viatorus