unique_ptr和make_unique在electron中的使用

举报
liuzhen007 发表于 2021/05/26 17:39:12 2021/05/26
【摘要】 目录   引言 正文 引言 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构造函数,不支持普通的拷贝和赋值操作。


  
  1. int main()
  2. {
  3. // 创建一个unique_ptr实例
  4. unique_ptr<int> pInt(new int(666));
  5. unique_ptr<int> pInt2(pInt); // 报错
  6. unique_ptr<int> pInt3 = pInt; // 报错
  7. }

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

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


  
  1. int main()
  2. {
  3. unique_ptr<int> pInt(new int(888));
  4. unique_ptr<int> pInt2 = std::move(pInt); // 转移所有权
  5. //cout << *pInt << endl; // 出错,pInt为空
  6. cout << *pInt2 << endl;
  7. unique_ptr<int> pInt3(std::move(pInt2));
  8. }

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

.h头文件

std::unique_ptr<DesktopMediaList> window_capturer_;
 

.cc文件


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

 

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

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

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

评论(0

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

全部回复

上滑加载中

设置昵称

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

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

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