1

您将在本文档的第 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; }
    // ...
};

看起来, p 指向的对象将在上面的赋值运算符中泄漏。

4

3 回答 3

4

这不是泄漏,因为他没有更改指针。如果他这样做了

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

那么这将是一个内存泄漏。他正在对 p 指向的对象进行分配,而不是对 p 本身。

于 2012-12-24T21:02:02.527 回答
3

不会。不会有泄漏,因为他没有改变指针。当然,它仍然缺少复制构造函数,但除此之外,没有错误。

于 2012-12-24T21:01:31.013 回答
1

分配不是问题:分配的不是指针,而是指向的值。假设T' 的赋值是异常安全的,Safe<T>' 的复制赋值也是安全的。但是,该类缺少复制构造函数。

于 2012-12-24T21:01:55.840 回答