unique_ptr和make_unique在electron中的使用
目录
引言
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
- 点赞
- 收藏
- 关注作者
评论(0)