Create static storage (which can be based on std::map<unsigned long, std::shared_ptr<T>>). Provide Functions:
- register a shared pointer in the repository (which saves it on the map and returns a unique long one).
shared_ptr,- unsigned long
( ).
, - unsigned long, ( , ), , , , .
: ( , , !)
template typename<T>
class Store
{
static std::map<unsigned long, std::shared_ptr<T>> store;
unsigned long h;
bool contains(unsigned long i)
{
return store.find(i) != store.end();
}
public:
unsigned long save(const std::shared_ptr& ptr)
{
if (store.size() >= std::numeric_limits<unsigned long>::max())
{
}
do
{
++h;
}
while(contains(h));
store[h] = ptr;
return h;
}
std::shared_ptr<T> retrieve(unsigned long handle)
{
if (!contains(handle))
{
}
const auto result = store[handle];
store.erase(handle);
return result;
}
};