您可以在{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指向的对象将泄露在上面的赋值运算符中。
答案 0 :(得分:4)
这不是泄漏,因为他没有改变指针。如果他做了
Safe& operator=(const Safe& a) { p = a.p; return *this; }
然后就是内存泄漏。他正在对p指向的对象进行赋值,而不是对p本身进行赋值。
答案 1 :(得分:3)
没有。没有泄漏,因为他没有改变指针。当然,它仍然缺少复制构造函数,但除此之外,没有错误。
答案 2 :(得分:1)
分配不是一个问题:它不是指定的指针,而是指向的值。假设T
的分配是异常安全的,Safe<T>
的拷贝分配也是安全的。但是,该类缺少复制构造函数。