示例没有意义,但仍然无法解释为什么不调用自定义删除器。
得到答案后,我对代码进行了编辑,以便在myP
超出范围之前,smartP
不为空
int * myP = NULL;
{
std::unique_ptr<int, std::function<void(int*)>> smartP(myP, [](int * a) {
*a = 8; // Custom deleter that is trying to dereference NULL never called
});
int a = 9;
myP = &a;
} // smartP goes out of scope, I expect custom deleter to be called
答案 0 :(得分:6)
unique_ptr
的析构函数仅在包含的指针不是nullptr
时才调用其删除程序。
从N3337,[unique.ptr.single.dtor]/2
效果: 如果
get() == nullptr
没有效果。否则为get_deleter()(get())
。