/* * Copyright (c) 2016 The ZLToolKit project authors. All Rights Reserved. * * This file is part of ZLToolKit(https://github.com/ZLMediaKit/ZLToolKit). * * Use of this source code is governed by MIT license that can be found in the * LICENSE file in the root of the source tree. All contributing project authors * may be found in the AUTHORS file in the root of the source tree. */ #ifndef UTIL_ONCETOKEN_H_ #define UTIL_ONCETOKEN_H_ #include #include namespace toolkit { class onceToken { public: using task = std::function; template onceToken(const FUNC &onConstructed, task onDestructed = nullptr) { onConstructed(); _onDestructed = std::move(onDestructed); } onceToken(std::nullptr_t, task onDestructed = nullptr) { _onDestructed = std::move(onDestructed); } ~onceToken() { if (_onDestructed) { _onDestructed(); } } private: onceToken() = delete; onceToken(const onceToken &) = delete; onceToken(onceToken &&) = delete; onceToken &operator=(const onceToken &) = delete; onceToken &operator=(onceToken &&) = delete; private: task _onDestructed; }; } /* namespace toolkit */ #endif /* UTIL_ONCETOKEN_H_ */