这段代码会泄露内存吗
Does this piece of code leak memory?
所以我和一个朋友发生了争吵,还有什么比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
抛出异常,则会发生内存泄漏。如果元素赋值抛出,就会发生这种情况。这一切都取决于T
和rhs
的状态。
具体来说,如果对于任何非负整数n < rhs._size
,以下抛出将导致内存泄漏:
*(_data + n) = *(rhs._data + n);
相关文章:
- 在java中解决这段代码时面临循环中的问题
- 我是如何在这段代码中出现分段错误的
- 我不明白这段代码是如何对这个pythonlist()进行排序的,也不明白如何用C++中的向量来重现它
- 为什么这段代码不起作用,我该如何解决?
- 为什么这段代码给我错误? 有没有自错?
- 有人可以解释一下这段代码如何能够反转字符串
- 可能我知道为什么这段代码没有给出任何输出吗?
- 这段代码的最后一行在做什么?
- 我不知道为什么这段代码会让核心被转储?
- 我试图用这段代码找到二叉树的高度,但它一直返回 0,有人可以告诉我为什么吗?
- 存储在哪个内存段(代码/数据段)类(员工)中?
- C++:为什么这段代码给我内存问题/未定义的行为?
- 执行以下 2 段代码会消耗相同的内存
- 为什么这段代码有内存泄漏
- 这段代码会泄露内存吗
- 为什么这段代码在c++中有内存泄漏?
- c++内存管理.这段代码有什么问题?
- 为什么这段代码会产生内存泄漏
- 这段代码中如何发生内存泄漏
- 这段C++代码怎么会出现内存泄漏