关于声明Safe类异常安全的说明

时间:2012-12-24 20:58:34

标签: c++ memory-leaks assignment-operator

您可以在{9}}的第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指向的对象将泄露在上面的赋值运算符中。

3 个答案:

答案 0 :(得分:4)

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

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

然后就是内存泄漏。他正在对p指向的对象进行赋值,而不是对p本身进行赋值。

答案 1 :(得分:3)

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

答案 2 :(得分:1)

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