#pragma once #include template class TNonDestroyingHolder: public THolder { public: TNonDestroyingHolder(T* t = nullptr) noexcept : THolder(t) { } TNonDestroyingHolder(TAutoPtr t) noexcept : THolder(t) { } ~TNonDestroyingHolder() { Y_ABORT_UNLESS(!*this, "stored object must be explicitly released"); } }; template class TNonDestroyingAutoPtr: public TAutoPtr { public: inline TNonDestroyingAutoPtr(T* t = 0) noexcept : TAutoPtr(t) { } inline TNonDestroyingAutoPtr(const TAutoPtr& t) noexcept : TAutoPtr(t.Release()) { } inline ~TNonDestroyingAutoPtr() { Y_ABORT_UNLESS(!*this, "stored object must be explicitly released"); } };