unique_ptr和make_unique在electron中的使用

举报
liuzhen007 发表于 2021/05/26 17:39:12 2021/05/26
5.3k+ 0 0
【摘要】 目录   引言 正文 引言 C++11标准库提供了两种智能指针,它们的区别在于管理底层指针的方式:shared_ptr允许多个指针指向同一个对象;unique_ptr则“独占”所指向的对象。C++11标准库还定义了一个名为weak_ptr的辅助类,它是一种弱引用,指向shared_ptr所管理的对象。这三种类型都定义在memory头文件中。智能指针是模板...

目录

引言

正文


引言

C++11标准库提供了两种智能指针,它们的区别在于管理底层指针的方式:shared_ptr允许多个指针指向同一个对象;unique_ptr则“独占”所指向的对象。C++11标准库还定义了一个名为weak_ptr的辅助类,它是一种弱引用,指向shared_ptr所管理的对象。这三种类型都定义在memory头文件中。智能指针是模板类而不是指针。类似vector,智能指针也是模板,当创建一个智能指针时,必须提供额外的信息即指针可以指向的类型。默认初始化的智能指针中保存着一个空指针。智能指针的使用方式与普通指针类似。如果在一个条件判断中使用智能指针,效果就是检测它是否为空。

正文

unique_ptr在使用过程中主要注意的有两点,接下来进行介绍。

一、无法进行复制构造和赋值操作

unique_ptr没有copy构造函数,不支持普通的拷贝和赋值操作。


      int main()
      {
      // 创建一个unique_ptr实例
      unique_ptr<int> pInt(new int(666));
      unique_ptr<int> pInt2(pInt); // 报错
      unique_ptr<int> pInt3 = pInt;   // 报错
      }
  
 

二、可以进行移动构造和移动赋值操作 

unique_ptr虽然不支持普通的拷贝和赋值操作,但却提供了一种移动机制来将指针的所有权从一个unique_ptr转移给另一个unique_ptr。如果需要转移所属权,可以使用std::move()函数。


      int main()
      {
      unique_ptr<int> pInt(new int(888));
      unique_ptr<int> pInt2 = std::move(pInt); // 转移所有权
      //cout << *pInt << endl; // 出错,pInt为空
      cout << *pInt2 << endl;
      unique_ptr<int> pInt3(std::move(pInt2));
      }
  
 

Electron中的具体应用如下所示 :

.h头文件

std::unique_ptr<DesktopMediaList> window_capturer_;
 

.cc文件


      window_capturer_ = std::make_unique<NativeDesktopMediaList>(
       content::DesktopMediaID::TYPE_WINDOW,
       content::desktop_capture::CreateWindowCapturer());
      window_capturer_->SetThumbnailSize(thumbnail_size);
      window_capturer_->AddObserver(this);
      window_capturer_->Update(base::BindOnce(
       &DesktopCapturer::UpdateSourcesList, weak_ptr_factory_.GetWeakPtr(),
       window_capturer_.get()));
  
 

文章来源: liuzhen.blog.csdn.net,作者:Data-Mining,版权归原作者所有,如需转载,请联系作者。

原文链接:liuzhen.blog.csdn.net/article/details/108679282

【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

作者其他文章

评论(0

抱歉,系统识别当前为高风险访问,暂不支持该操作

    全部回复

    上滑加载中

    设置昵称

    在此一键设置昵称,即可参与社区互动!

    *长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

    *长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。