У нас есть библиотека, которая предоставляет интерфейс C через extern "C"
и используется из кода C, но внутри нее используются контейнеры STL и некоторые функции C++, такие как RAII для удобства.Возможно ли написать специализированный распределитель STL, который использует указатели на функции распределения, предоставляемые пользователем?
Теперь есть новое требование, чтобы библиотека могла принимать указатели на пользовательскую функцию malloc
и free
, исходящую из кода клиента, и использовать ее для размещения внутри. Я могу разместить их в контекстной структуре библиотеки и использовать их там, где это необходимо, но использование их с помощью STL вызывает недоумение ...
Я посмотрел классы распределителей, но кажется, что контейнеры STL должны иметь возможность использовать конструкторы по умолчанию для создания распределителя, и кажется, что нет никакого способа разместить эти указатели в них, чтобы позволить им звонить через них для выполнения распределений.
Возможно ли это работать предпочтительно безопасным потоком (без использования глобалов)?
Этот конструктор std :: map вызывает у меня проблемы: 'map(): Mybase (key_compare(), allocator_type())' поэтому вопрос. (В VS2008). Но это может быть хорошо, потому что есть экземпляры, построенные конструктором по умолчанию. Являются ли компиляторы достаточно умными, чтобы не жаловаться, если я вообще не использую конструктор по умолчанию при объявлении переменных? – Calmarius
Да. Если вы не используете конструктор по умолчанию (и явно не создаете экземпляр всего типа 'map'), тогда конструктор по умолчанию для распределителя не нужен. –
Я не знаю, какая часть требований к распределителю C++ 11 VS2008 реализуется, вам может потребоваться предоставить ряд других функций-членов, таких как 'construct' и' destroy', и определить несколько typedefs, таких как 'rebind :: other', 'pointer',' const_pointer', 'reference' и т. д., но если вы все сделаете, то он должен работать нормально. –