std::unique_ptr::~unique_ptr

~unique_ptr();
(C++11 起)

get() == nullptr 则无效果。否则,通过 get_deleter()(get()) 销毁占有的对象。

要求 get_deleter()(get()) 不抛异常。

注意

即使拥有默认删除器的 std::unique_ptr<T> 能以不完整类型 T 构造,在调用析构函数的代码位置, T 必须完整。

示例

下列程序演示定制删除器的用法。

#include <iostream>
#include <memory>
 
int main () 
{
    auto deleter = [](int* ptr){
        std::cout << "[deleter called]\n";
        delete ptr;
    };
 
    std::unique_ptr<int,decltype(deleter)> uniq(new int, deleter);
    std::cout << (uniq ? "not empty\n" : "empty\n");
    uniq.reset();
    std::cout << (uniq ? "not empty\n" : "empty\n");
}

输出:

not empty
[deleter called]
empty

版本历史

  • (当前 | 先前 2017年10月10日 (二) 01:34Fruderica讨论 | 贡献. . (1,091字节) (+435). . (撤销)
  • 当前 | 先前 2012年11月2日 (五) 13:56P12bot讨论 | 贡献 . . (656字节) (+329). . (r2.7.3) (机器人添加:de, en, es, fr, it, ja, pt, ru) (撤销)
  • 当前 | 先前 2012年10月27日 (六) 03:45P12讨论 | 贡献 . . (327字节) (0). . (1个修订: Translate from the English version) (撤销)
  • 当前 | 先前 2012年10月26日 (五) 06:00TranslationBot讨论 | 贡献. . (327字节) (-3). . (Translated from the English version using Google Translate) (撤销)
  • 当前 | 先前 2012年10月25日 (四) 14:56P12讨论 | 贡献 . . (330字节) (0). . (1个修订: Translate from the English version) (撤销)
  • 当前 | 先前) 2012年10月25日 (四) 12:00TranslationBot讨论 | 贡献. . (330字节) (+330). . (Translated from the English version using Google Translate)