Inside Bitcoin
Opening the selected file…
Inside Bitcoin
Opening the selected file…
The code behind the network, with room to understand it.
Release published 2026-10-28 · Snapshot fetched 2026-11-01. Latest stable release at fetch time; development branches and Git history are excluded. Only the selected code window and visible folders load here.
1// Copyright (c) 2018 The LevelDB Authors. All rights reserved.2// Use of this source code is governed by a BSD-style license that can be3// found in the LICENSE file. See the AUTHORS file for names of contributors.5#ifndef STORAGE_LEVELDB_UTIL_NO_DESTRUCTOR_H_6#define STORAGE_LEVELDB_UTIL_NO_DESTRUCTOR_H_8#include <cstddef>9#include <type_traits>10#include <utility>12namespace leveldb {14// Wraps an instance whose destructor is never called.15//16// This is intended for use with function-level static variables.17template <typename InstanceType>18class NoDestructor {19public:20template <typename... ConstructorArgTypes>21explicit NoDestructor(ConstructorArgTypes&&... constructor_args) {22static_assert(sizeof(instance_storage_) >= sizeof(InstanceType),23"instance_storage_ is not large enough to hold the instance");24static_assert(std::is_standard_layout_v<NoDestructor<InstanceType>>);25static_assert(26offsetof(NoDestructor, instance_storage_) % alignof(InstanceType) == 0,27"instance_storage_ does not meet the instance's alignment requirement");28static_assert(29alignof(NoDestructor<InstanceType>) % alignof(InstanceType) == 0,30"instance_storage_ does not meet the instance's alignment requirement");31new (instance_storage_)32InstanceType(std::forward<ConstructorArgTypes>(constructor_args)...);33}35~NoDestructor() = default;37NoDestructor(const NoDestructor&) = delete;38NoDestructor& operator=(const NoDestructor&) = delete;40InstanceType* get() {41return reinterpret_cast<InstanceType*>(&instance_storage_);42}44private:45alignas(InstanceType) char instance_storage_[sizeof(InstanceType)];46};48} // namespace leveldb50#endif // STORAGE_LEVELDB_UTIL_NO_DESTRUCTOR_H_
Independent explanations by MyBitcoinExplorer. Not affiliated with or endorsed by Bitcoin Core. Guides are educational and do not replace the source or its tests.
Bitcoin Core source © its contributors, distributed under the MIT license. Original notices and bundled third-party licenses are retained in the source tree.