Одна из библиотек, которые мы используем для нашего продукта, использует одноэлементный доступ для доступа к нему. Я уверен, что он реализован как статический экземпляр (он не является открытым исходным кодом). Это хорошо работает для одного приложения документа, но в нашем приложении может быть загружено более одного документа. Я предполагаю, что доступ к экземпляру написано что-то вроде этого:Создание нескольких экземпляров глобальной статики в C++?
Instance* getInstance() {
static Instance* inst = new Instance();
return inst;
}
В подобных ситуациях, есть какой-то способ робастно создать более один экземпляр? Единственное, о чем я могу думать, это иметь больше, чем обрабатывать и использовать какой-то тип IPC, чтобы связать все это вместе. Я не могу придумать ничего менее взломанного.
Я попросил поставщика реализовать некоторый тип токена сеанса, поэтому я могу иметь несколько параллельных экземпляров, но они большие и мы маленькие.
Cory
Edit:
- машина является Windows машину
- глобальный статический в основном большой завод. Я хочу сессионную фишку какого-либо типа, так что я могу легко сказать, «освободить все ресурсы этой сессии» (нет никакого способа, чтобы повторно инициализировать глобальную статику, что я знаю)
Вместо того, чтобы попробовать некоторые нечестные махинации чтобы получить то, что я хочу, я собираюсь обернуть все это своим классом и добавить ключ сеанса для каждого получателя. Внутри я буду следить за тем, что было выделено, добавив мой собственный метод выпуска для возврата ресурсов. Это неоптимально по многим причинам, но я не могу придумать лучшего представления.
Спасибо всем за отличную обратную связь.
На какой платформе вы работаете? – Skrymsli
Вот почему синглеты злы. Если это действительно серьезно, то для чего может быть только один объект, он не должен быть одиночным. Пусть кто-то другой решит, сколько экземпляров объекта есть. –