添加链接
link管理
链接快照平台
  • 输入网页链接,自动生成快照
  • 标签化管理网页链接
相关文章推荐
坐怀不乱的大葱  ·  RPC error - Logic 2 ...·  2 周前    · 
兴奋的西装  ·  Drivers & Downloads - ...·  4 周前    · 
想发财的炒粉  ·  MySQL ...·  1 年前    · 
Filesystem library (C++17) Regular expressions library (C++11) Concurrency support library (C++11) Technical specifications Symbols index External libraries
[edit]
Utilities library

std::default_delete is the default destruction policy used by std::unique_ptr when no deleter is specified. Specializations of default_delete are empty classes on typical implementations, and used in the empty base class optimization .

1) The non-specialized default_delete uses delete to deallocate memory for a single object.
2) A partial specialization for array types that uses delete [ ] is also provided.
Language support
Type support (basic types, RTTI)
Library feature-test macros (C++20)
Dynamic memory management
Program utilities
Coroutine support (C++20)
Variadic functions
Debugging support
(C++26)
Three-way comparison
(C++20)
(C++20) (C++20) (C++20)
(C++20) (C++20) (C++20)
General utilities
Date and time
Function objects
Formatting library (C++20)
(C++11)
Relational operators (deprecated in C++20)
Integer comparison functions
(C++20) (C++20) (C++20)
(C++20)
Swap and type operations
(C++14)
(C++11)
(C++11)
(C++11)
(C++17)
Common vocabulary types
(C++11)
(C++17)
(C++17)
(C++17)
(C++11)
(C++17)
(C++23)
Elementary string conversions
(C++17)
(C++17)
(C++17)
(C++17)
(C++20)
(C++17)
Constrained uninitialized memory algorithms
ranges::uninitialized_default_construct
(C++20)
Allocators
Memory resources
Garbage collection support
(C++11) (until C++23)
(C++11) (until C++23)
(C++11) (until C++23)
(C++11) (until C++23)
(C++11) (until C++23)
(C++11) (until C++23)
Uninitialized storage
( until C++20* )
( until C++20* )
( until C++20* )
Explicit lifetime management
default_delete ( const default_delete < U [ ] > & d ) noexcept ;
1) Constructs a std::default_delete object.
2) Constructs a std :: default_delete < T > object from another std::default_delete object. This constructor will only participate in overload resolution if U * is implicitly convertible to T * .
3) Constructs a std :: default_delete < T [ ] > object from another std :: default_delete < U [ ] > object. This constructor will only participate in overload resolution if U ( * ) [ ] is implicitly convertible to T ( * ) [ ] .

Parameters

void operator ( ) ( U * ptr ) const ;
1) Calls delete on ptr .
2) Calls delete [ ] on ptr . This function will only participate in overload resolution if U ( * ) [ ] is implicitly convertible to T ( * ) [ ] .

In any case, if U is an incomplete type, the program is ill-formed.

Parameters

[ edit ] Invoking over Incomplete Types

At the point in the code the operator ( ) is called, the type must be complete. In some implementations a static_assert is used to make sure this is the case. The reason for this requirement is that calling delete on an incomplete type is undefined behavior in C++ if the complete class type has a nontrivial destructor or a deallocation function, as the compiler has no way of knowing whether such functions exist and must be invoked.

[ edit ] Notes

Contents

  • 1 Member functions
  • 2 std::default_delete:: default_delete
  • 2.1 Parameters
  • 2.2 Notes
  • 3 std::default_delete:: operator()
  • 3.1 Parameters
  • 3.2 Exceptions
  • 3.3 Invoking over Incomplete Types
  • 3.4 Notes
  • 3.5 Example
  • 3.6 Defect reports
  • 3.7 See also
  • default_delete ( const default_delete < U > & d ) noexcept ;
    (since C++11)
    (until C++23)
    (member only of primary default_delete template)
    template < class U >
    constexpr default_delete ( const default_delete < U > & d ) noexcept ;
    (since C++23)
    (member only of primary default_delete template)
    (since C++11)
    (until C++23)
    (member only of default_delete<T[]> specialization)
    template < class U >
    constexpr default_delete ( const default_delete < U [ ] > & d ) noexcept ;
    (since C++23)
    (member only of default_delete<T[]> specialization)
    void operator ( ) ( T * ptr ) const ;
    (since C++11)
    (until C++23)
    (member only of primary default_delete template)
    constexpr void operator ( ) ( T * ptr ) const ;
    (since C++23)
    (member only of primary default_delete template)
    (since C++11)
    (until C++23)
    (member only of default_delete<T[]> specialization)
    template < class U >
    constexpr void operator ( ) ( U * ptr ) const ;
    (since C++23)
    (member only of default_delete<T[]> specialization)
    Feature-test macro Value Feature __cpp_lib_constexpr_memory 202202L (C++23) constexpr constructor and operator ( )

    [ edit ] Example

    #include <algorithm>
    #include <memory>
    #include <vector>
    int main()
    //  {
    //      std::shared_ptr<int> shared_bad(new int[10]);
    //  } // the destructor calls delete, undefined behavior
            std::shared_ptr<int> shared_good(new int[10], std::default_delete<int[]>());
        } // the destructor calls delete[], ok
            std::unique_ptr<int> ptr(new int(5));
        } // unique_ptr<int> uses default_delete<int>
            std::unique_ptr<int[]> ptr(new int[10]);
        } // unique_ptr<int[]> uses default_delete<int[]>
        // default_delete can be used anywhere a delete functor is needed
        std::vector<int*> v;
        for (int n = 0; n < 100; ++n)
            v.push_back(new int(n));
        std::for_each(v.begin(), v.end(), std::default_delete<int>());
    

    [edit] Defect reports

    The following behavior-changing defect reports were applied retroactively to previously published C++ standards.

    Applied to Behavior as published Correct behavior LWG 2118 C++11 member functions of default_delete<T[]> rejected qualification conversions accept

    [ edit ] See also

    (C++11)
    smart pointer with unique object ownership semantics
    (class template) [edit]
    Toolbox
  • What links here
  • Related changes
  • Upload file
  • Special pages
  • Printable version
  • Page information
    • In other languages
  • Deutsch
  • Español
  • Français
  • Italiano
  • 日本語
  • Português
  • Русский
  • 中文
  •