Copiar alocador stateful: semântica do alocador de biblioteca padrão e memória interna

Estou escrevendo uma coleção de alocadores, com a intenção de que eles sejam usados em ambientes de alto desempenho. Portanto, é recomendável um pouco de uso restrito (mediado pelo compilador, não por erros de tempo de execução). Estive lendo a semântica do C ++ 11 dos alocadores com estado e como eles devem ser usados pelos contêineres em conformidade.

Colei um alocador simples abaixo do qual apenas contém um bloco de memória no objeto alocador. No C ++ 03, isso era ilegal.

template <typename T, unsigned N>
class internal_allocator {
private:
    unsigned char storage[N];
    std::size_t cursor;
public:
    typedef T value_type;
    internal_allocator() : cursor(0) {}
    ~internal_allocator() { }

    template <typename U>
    internal_allocator(const internal_allocator<U>& other) {
        // FIXME: What are the semantics here?
    }

    T* allocate(std::size_t n) {
        T* ret = static_cast<T*>(&storage[cursor]);
        cursor += n * sizeof(T);
        if (cursor > N)
            throw std::bad_alloc("Out of objects");
        return ret;
    }
    void deallocate(T*, std::size_t) {
        // Noop!
    }
};

No C ++ 11, isso é possível?O que significa copiar um alocador com estado? Como o contêiner de destino chama o construtor de cópia para todos os elementos no contêiner de origem, a memória dentro do alocador deve ser explicitamente copiada ou a construção padrão é suficiente?

Isso leva à questão, dado o desempenho como objetivo final, quais são os valores sãos parapropagate_on_container_{copy,swap,move}? O queselect_on_container_copy_construction Retorna?

É um prazer fornecer mais detalhes mediante solicitação, pois esse parece um problema bastante nebuloso - pelo menos para mim =)

Esta afirmação decorre da definição de que quandoa == b retornatrue por duas instâncias do mesmoAllocator tipo, é garantido que a memória alocada coma pode ser desalocado comb. Isso parece nunca ser verdade para esse alocador. A norma também afirma que, quando um alocador é construído de cópia, como emA a(b), a == b é garantido para retornar true.

questionAnswers(1)

yourAnswerToTheQuestion