这段代码是否会泄漏内存?

c++ memory-management memory-leaks

76 观看

1回复

6673 作者的声誉

所以我和一个朋友吵架,还有什么比SO更好的解决方法呢?

以下面的简化示例为例。假设所有其他功能均已正确实现。此复制构造函数是否会泄漏内存?

我的立场是,它绝对不会。它[rhs._size]为新对象分配内存,当对象超出作用域时,该对象将在析构函数中被释放,而分配给rhs它的内存则在其各自的析构函数中被释放。

template<typename T>
class dynarray
{
private:
    T* _data;
    std::size_t _size;

public:
    dynarray(const dynarray& rhs)
        : _data(new T[rhs._size]), _size(rhs._size)
    {
        std::copy(rhs._data, rhs._data + rhs._size, _data);
    }

    ~dynarray() { delete[] _data; }
};
作者: DeiDei 的来源 发布者: 2016 年 1 月 8 日

回应 (1)


8

22871 作者的声誉

决定

是的,您可能会泄漏内存。

如果std::copy引发异常,则会发生内存泄漏。如果抛出元素分配,则会发生这种情况。这一切都取决于T状态rhs

特别是,对于任何非负整数n < rhs._size,如果发生以下情况,则会泄漏内存:

 *(_data + n) = *(rhs._data + n);
作者: Paul Evans 发布者: 08.01.2016 05:01
32x32