建議N4282提倡一種新型的非擁有智能指針,稱爲observer_ptr
。它的工作名稱是exempt_ptr
,它的目的是替代「原始指針」。但我不明白它的目的,特別是對於這個假設的代碼是什麼它的設計來實現:「世界上最笨的智能指針」有什麼意義?
struct do_nothing
{
template <class T>
void operator()(T*) { }; // do nothing
};
template <class T>
using non_owning_ptr = unique_ptr<T, do_nothing>;
即使看完文章後,我不明白,一個智能指針是不會做的目的沒有。它對非擁有shared_ptr
或原始指針有什麼優勢?
它可以幫助您通過靜態分析編寫正確的代碼。例如,如果你錯誤地在其中的一個上調用了「delete」,編譯器會給你一個錯誤,從而阻止你釋放你不擁有的內存。 –