[英]How could one implement an observer_ptr?
您可以通過創建帶有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
...沒有花哨的名稱。
如果你絕對必須擁有花哨的名字和/或一個獨特的類型,那么自己實現它應該很容易。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.