Ich möchte eine definierte Zuordnungsgrenze (für meinen μC) haben, um "dynamischen" Speicher zuzuweisen.Benutzerdefinierter Zuordner mit Kompilierzeitarray
Mein Code:
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];
};
Wenn ich dieses allocator mit der Smart-Pointer-Funktion: std :: allocate_shared ich einen Compiler-Fehler:
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
ich diesen Fehler zu verstehen, aber ich kann es nicht lösen. Wie kann ich ein Objekt wie dieses initialisieren:
std::_Sp_counted_ptr_inplace<int, SimpleAllocator<int, 10>,
__gnu_cxx::_Lock_policy::_S_atomic>
Und was haben Sie versucht, das Array zu initialisieren? Wie verwenden Sie die Zuweisungsklasse? Können Sie uns bitte ein [minimales, vollständiges und verifizierbares Beispiel] (http://stackoverflow.com/help/mcve) zeigen? –
Nun, mein Live-Beispiel (siehe oben) sollte diese Richtlinie bereits erreichen. Es zeigt den Fehler in einem minimalen Beispiel. Ich möchte meinen * SimpleAllocator * mit std :: allocate_shared verwenden. Welche Informationen benötigen Sie sonst noch? Der Speicherort sollte nicht im Datensegment liegen und nicht innerhalb des Heapspeichers zugewiesen werden, da er in einem μC verwendet wird. – Viatorus