gpt4 book ai didi

c++ - 使用 std::uninitialized_copy 的 Stroustrup 示例中的资源泄漏?

转载 作者:可可西里 更新时间:2023-11-01 16:36:53 25 4
gpt4 key购买 nike

在 Stroustrup 书(C++ 编程语言第 4 版,§17.5.1,第 508 页)中,我找到了以下简单 矩阵 的复制构造函数示例> 类(class):

template < class T >
Matrix:: Matrix( const Matrix& m ) // copy constructor
: dim{ m.dim },
elem{ new T[ m.size() ] }
{
uninitialized_copy( m.elem, m.elem+m.size(), elem ); // copy elements
}

(其中 elem 是指向 T 元素数组的指针,声明为 T* elem;)。

关于这个拷贝构造函数我有两个问题:

  1. 为什么该方法首先默认构造一个 m.size() 元素数组,只是为了在正文中用 uninitialized_copy 调用覆盖它?

  2. 随着初始化 elem{ new T[ m.size() ] },T 的构造函数被调用 m.size() 次。但是,主体中的算法 uninitialized_copy 在同一区域构造新数组之前不会调用 T 析构函数。这是潜在的资源泄漏吗? (注意:不是内存泄漏,而是资源泄漏!例如,如果 T 在 ctor 中获取锁或文件描述符并在 dtor 中释放它)。

谢谢

最佳答案

我是问题的作者。
我通过电子邮件向 Bjarne Stroustrup 提出了我的两个问题,并想在这里分享他的答案。

他亲切地(很快 :-) 回答:

  1. 这是一种疏忽和浪费。
  2. 是的,如果类型 T 持有资源,那就是泄漏

他还写道他将修复错误。

关于c++ - 使用 std::uninitialized_copy 的 Stroustrup 示例中的资源泄漏?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24860171/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com