我的目標就是在這裏實現的unique_ptr的簡單版本,只提供一個構造函數,析構函數 - >,*和釋放()。實施的unique_ptr:刪除未分配的對象
不過,我不知道該怎麼在一個的unique_ptr使用未分配的指針初始化的情況下做的。
如
int i = 0;
unique_ptr<int> p{&i};
如果的unique_ptr只是調用刪除它擁有的指針,這將產生不確定的(和不受歡迎的)行爲,至少據我所知。我能做些什麼來防止這種情況發生?
編輯:我的問題嘗試如下...
template<typename T>
class Uptr
{
public:
Uptr<T>(T* pt) : mp_owned{pt} {}
~Uptr<T>() {delete mp_owned;}
Uptr<T>(const Uptr<T>&) = delete;
Uptr<T>& operator=(const Uptr<T>&) = delete;
T& operator*() const {return *mp_owned;}
T* operator->() const {return mp_owned;}
T* release() {return mp_owned;}
private:
T* mp_owned;
};
** real **'unique_ptr'也是如此。但要回答你的具體問題 - 你不能做任何事情,可靠/便攜地(至少不是我最後一次熟悉C++)。 –
你可以有一個標誌來控制你是否調用delete,並在堆棧分配對象上創建unique_ptr時進行設置。當然,它乞求的問題,爲什麼你要創建unique_ptrs堆棧分配對象在第一位 –
這沒有任何意義。 「unique_ptr」的意義在於它是資源的唯一所有者。如果'stack'擁有它,那麼'unique_ptr'不應該指向它。 – Galik