| 631 | } |
| 632 | |
| 633 | void PreRelease() noexcept { |
| 634 | if constexpr (!std::is_trivially_destructible_v<T> && |
| 635 | !google::protobuf::Arena::is_destructor_skippable<T>::value) { |
| 636 | if (static_cast<bool>(*this) && |
| 637 | (arena_ & common_internal::kUniqueArenaBits) == |
| 638 | common_internal::kUniqueArenaUnownedBit) { |
| 639 | // We never registered the destructor, call it if necessary. |
| 640 | arena()->OwnDestructor(const_cast<std::remove_const_t<T>*>(ptr_)); |
| 641 | arena_ &= common_internal::kUniqueArenaPointerMask; |
| 642 | } |
| 643 | } |
| 644 | } |
| 645 | |
| 646 | void Release(T** ptr, Owner* owner) noexcept { |
| 647 | if (ptr_ == nullptr) { |