ZBLOG

const obs_location_rect_t &location1 = locationRectMap_[1]; cv::Mat CropFrame = input_img(location1.checkRect0); std::shared_ptr imgPtr = std::make_shared(CropFrame);这里std::make_shared

std::make_shared<cv::Mat>(CropFrame) 会创建一个 cv::Mat 对象并返回一个指向该对象的 shared_ptr。在这个过程中,std::make_shared 会为 cv::Mat 分配内存,并将构造好的对象放在这块内存中。因此,确实可以说它会“new”出一个指针,但更准确地说是使用 new 在堆上分配了内存。

具体来说:

  1. 内存分配std::make_shared 首先会分配足够的内存来容纳所需的对象(在这里是 cv::Mat)以及与之关联的控制块,用于管理引用计数。

  2. 构造对象:然后,它会使用传入的参数(这里是 CropFrame)来构造 cv::Mat 对象。

  3. 返回指针:最后,返回一个智能指针(即 std::shared_ptr<cv::Mat>),它管理这个新创建的对象及其生命周期。

使用 std::make_shared 的好处是,它能够减少内存分配次数,提高性能,同时使得资源管理更加安全,因为当没有更多的 shared_ptr 指向该对象时,自动释放内存。这比直接用 new cv::Mat(CropFrame) 创建裸指针后再手动管理要安全和方便得多。


内容由零声教学AI助手提供,问题来源于学员提问

本站部分文章来源于网络,版权归原作者所有,如有侵权请联系站长删除。
转载请注明出处:http://sdn.0voice.com/?id=6944

分享:
扫描分享到社交APP
上一篇
下一篇
发表列表
游客 游客
此处应有掌声~
评论列表

还没有评论,快来说点什么吧~

联系我们

在线咨询: 点击这里给我发消息

微信号:3007537140

上班时间: 10:30-22:30

关注我们
x

注册

已经有帐号?