2012-12-24 135 views
0

你會發現頁面的this document 937下面的代碼上:澄清有關要求該類安全是異常安全

template<class T> class Safe 
{ 
    T* p; // p points to a T allocated using new 
    public: 
    Safe() : p(new T) {} 
    ~Safe() { delete p; } 
    Safe& operator=(const Safe& a) { *p = *a.p; return *this; } 
    // ... 
}; 

看起來,這是指由對對象​​將在分配被泄露上述操作員。

回答

3

不會,因爲他沒有改變指針,所以不會有泄漏。當然,它仍然缺少複製構造函數,但除此之外,沒有錯誤。

+0

我給你的答案,因爲這是我收到的第一。 – Belloc

1

分配是不是問題:它不是被指定的指針,而是指向的值。假設T的分配是異常安全的,Safe<T>的複製分配也是安全的。但是,該類缺少複製構造函數。

4

這不是泄漏,因爲他沒有改變指針。如果他這樣做

Safe& operator=(const Safe& a) { p = a.p; return *this; } 

然後這將是一個內存泄漏。他正在對p指向的對象進行分配,而不是p自己。