我想將原始指針成員換成某個智能指針,以防止在開發類中刪除。指針下的對象的所有者在類之外。所以,看起來像boost::shared_ptr
和std::auto_ptr
不適合。以下是一個簡化示例:從原始指針創建weak_ptr <>
class Foo {
boost::weak_ptr<Bar> m_bar;
public:
void setBar(const Bar *bar) { // bar created on heap
m_bar = bar; // naturally compilation error
}
};
當然,它會導致編譯錯誤。從原始指針(如果存在)初始化weak_ptr
的正確方法是什麼?
可能重複轉換](http://stackoverflow.com/questions/17522020/shared-ptr-weak-ptr-conversions) –
如果你想防止刪除你的類中的那個指針,那麼不要對它調用'delete',並且不提供將指針公開給客戶端的訪問器函數。 'weak_ptr'意味着擁有'shared_ptr'的對象的非擁有視圖。如果你能以某種方式將指針填充到'weak_ptr'中,它不知道指針是否過期,也不會阻止我在類中調用'delete m_bar.lock()。get();'。你永遠無法使所有事情都百分之百白癡。 – Praetorian