其他分享
首页 > 其他分享> > c – 如何实现observer_ptr?

c – 如何实现observer_ptr?

作者:互联网

我想在我的项目中使用observer_ptr,但paper只定义了接口,而不是完整的实现.

有没有一种简单的方法可以自己实现它?

解决方法:

您可以通过创建带有NOP删除器的unique_ptr来轻松创建所谓的observer_ptr.

template<typename T>
struct nop_deleter
{
  void operator()(T*) const {}
};

template<typename T>
using observer_ptr = unique_ptr<T, nop_deleter>;

这仍将具有unique_ptr的行为,这意味着它只是移动的,而您希望observer_ptr是可复制的.这使我们更简单的实现:

template<typename T>
using observer_ptr = T*;

这可以做你想要的一切.你可以称之为observer_ptr< int>而不是int *,因为后者当然是邪恶的.它是可复制的,在破坏时什么都不做.

我在上面的答案中很滑稽,但希望,它会证明除了具有与原始指针类型不同的名称之外,observer_ptr没有多少实用性.使用非拥有原始指针没有任何问题.

您可能会认为observer_ptr传达了intent,但只有当您的代码库包含管理资源的原始指针实例时,该参数才有效.消除那些,然后原始指针将自动意味着observer_ptr …没有花哨的名称.

如果你绝对必须拥有花哨的名字和/或一个独特的类型,那么自己实现它应该很容易.

标签:c,pointers,smart-pointers
来源: https://codeday.me/bug/20191008/1870509.html