我想使用unique_ptr与我的删除程序。 我想我的我的unique_ptr与我的删除器完全兼容与unique_ptr与默认deleter。std :: unique_ptr,自定义删除和类型更改
我这样做:
template <typename T>
struct QObjectDeleteLaterDeletor :
public std::default_delete<T>
{
void operator()(T *p)
{
p->deleteLater();
}
};
template <typename T, class... Args>
std::unique_ptr<T> qtMakeUniqueSpecial(Args&&... args)
{
return std::unique_ptr<T>(
new T(std::forward<Args>(args)...),
QObjectDeleteLaterDeletor<T>());
}
这编译,但不起作用。我的自定义删除程序被忽略,并使用默认的删除程序,就好像我根本没有指定它一样。
我需要所有的这是可以做到这样的事情:
auto ptr1 = qtMakeUniqueSpecial<MyObject>();
std::unique_ptr<MyObject> ptr2;
ptr2 = std::move(ptr1);
请注意,现在连ptr1.reset()将导致调用标准缺失者,不是我一个。
这有可能吗?
但是在移动之后,'ptr1'没有指向数据的指针。在移动到“删除”后调用'ptr1'上的'reset'是没有意义的。您可以创建一个[最小,完整和可验证示例](http://stackoverflow.com/help/mcve)并向我们展示?并且请告诉我们*你怎么知道你的删除器没有被调用,但是默认是。 –
不,你正在做的就是将你喜欢的删除器切回到'default_delete'。 –
当然,我在移动之前称重置。最小的例子是在这个问题。 –