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()));

猜你喜欢

转载自blog.csdn.net/liuzehn/article/details/108679282