c++ - 这段代码是否泄漏内存?

标签 c++ memory-management memory-leaks

所以我和一个 friend 发生了争执,还有什么比 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; }
};

最佳答案

是的,你可以泄漏内存。

如果std::copy,你会发生内存泄漏抛出异常。如果元素赋值抛出,就会发生这种情况。这一切都取决于Trhs 的状态.

具体来说,如果对于任何非负整数 n < rhs._size,您将泄漏内存, 以下抛出:

 *(_data + n) = *(rhs._data + n);

关于c++ - 这段代码是否泄漏内存?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34669745/

相关文章:

java - Android 内存泄漏管理显示 "Don use non-static inner classes"但这会带来副作用

C++:为什么结构的自指针自动更改为 void*

c++ - 具有 typedef 返回值的模板化成员函数

python - 使用 SWIG 在 C++ Python 包装类中用二进制数据填充 char*

c++ - Tensorflow C++ 占位符初始化

ios - Google Maps SDK 导致 iOS 7 泄露

c - 为什么会出现内存泄漏(此初始化导致的段错误)?

c++ - 将指针插入原始内存

c - 写入堆内存时调用的系统调用

c - gcc 结构中的内存对齐