Uni*_*rsE 5 c++ pointers smart-pointers
我想observer_ptr
在我的项目中使用,但本文只定义了界面,而不是完整的实现.现在是否有开源实现,或者我必须自己完成?
Pra*_*ian 17
您可以observer_ptr
通过unique_ptr
使用NOP删除器创建一个所谓的平凡创建.
template<typename T>
struct nop_deleter
{
void operator()(T*) const {}
};
template<typename T>
using observer_ptr = unique_ptr<T, nop_deleter>;
Run Code Online (Sandbox Code Playgroud)
这仍然会有unique_ptr
行为,这意味着它只是移动,而你想要observer_ptr
是可复制的.这使我们更简单的实现:
template<typename T>
using observer_ptr = T*;
Run Code Online (Sandbox Code Playgroud)
这可以做你想要的一切.你可以称之为,observer_ptr<int>
而不是int *
,因为后者当然是邪恶的.它是可复制的,在破坏时什么都不做.
我在上面的答案中很滑稽,但希望它能证明observer_ptr
除了具有与原始指针类型不同的名称之外没有多少实用性.有什么错在使用非所属原始指针.
您可能会认为observer_ptr
传达意图,但该参数仅在您的代码库包含管理资源的原始指针实例时才有效.消除那些,然后原始指针将自动意味着observer_ptr
...没有花哨的名称.
如果你绝对必须拥有花哨的名字和/或一个独特的类型,那么自己实现它应该很容易.