К сожалению ... нет.
Это не то, для чего rebind
. rebind
используется потому, что распределитель предназначен для выделения объектов одного типа и только одного типа (std::allocator<T>
) в STL.
Однако есть хитрость. Например, когда вы создаете экземпляр std::list<T, std::allocator<T>>
, allocator
не должен выделять T
s, ему нужно вместо этого выделять некоторую внутреннюю структуру, такую как __list_node<T>
, и именно тогда rebind
используется, он создает новый распределитель, родственный элемент прецедента (они отличаются только параметром шаблона и, вероятно, совместно используют один и тот же пул памяти под крышками).
В вашем случае, однако, ваш распределитель и распределитель std::string
отличаются, и поэтому они не могут обмениваться памятью. Таким образом, у вас есть , чтобы сделать копию.
Вы можете оптимизировать операцию void swap(SecureString&, SecureString&)
, но не эту.
Один вопрос: почему бы не typedef std::string<char, SecureAllocator<char>> SecureString;
?