1. // ObjectHolder_t
  2. template <class F>
  3. void CallSafe(unique_ptr<Object>* ppObject, F Func)
  4. {
  5. if (!ppObject)
  6. return;
  7. Object* pRaw = ppObject->get();
  8. if (pRaw)
  9. Func(&pRaw);
  10. if (!pRaw)
  11. ppObject->reset();
  12. }
  13. // NSBInterpreter
  14. void NSBInterpreter::Delete()
  15. {
  16. string Handle = PopString();
  17. ObjectHolder.Execute(Handle, [this] (Object** ppObject)
  18. {
  19. if (NSBContext* pThread = dynamic_cast<NSBContext*>(*ppObject))
  20. RemoveThread(pThread);
  21. *ppObject = nullptr;
  22. });
  23. }