gpt4 book ai didi

c++ - `std::optional` 比 `std::shared_ptr` 和 `std::unique_ptr` 有什么优势?

转载 作者:塔克拉玛干 更新时间:2023-11-02 23:06:09 49 4
gpt4 key购买 nike

std::optional 的推理是 made by saying它可能包含也可能不包含值。因此,如果我们不需要它,它可以节省我们构建一个可能很大的对象的努力。

For example ,这里的工厂,如果不满足某些条件,将不会构造对象:

#include <string>
#include <iostream>
#include <optional>

std::optional<std::string> create(bool b)
{
if(b)
return "Godzilla"; //string is constructed
else
return {}; //no construction of the string required
}

但是这和这个有什么不同:

std::shared_ptr<std::string> create(bool b) 
{
if(b)
return std::make_shared<std::string>("Godzilla"); //string is constructed
else
return nullptr; //no construction of the string required
}

我们通过添加 std::optional 而不是通常只使用 std::shared_ptr 有什么好处?

最佳答案

What is it that we win by adding std::optional over just using std::shared_ptr in general?

假设您需要从带有“不是值”标志的函数返回一个符号。如果您为此使用 std::shared_ptr,您将有巨大的开销 - char 将分配到动态内存中,加上 std::shared_ptr将保持控制 block 。同时std::optional另一方面:

If an optional contains a value, the value is guaranteed to beallocated as part of the optional object footprint, i.e. no dynamicmemory allocation ever takes place. Thus, an optional object models anobject, not a pointer, even though the operator*() and operator->()are defined.

因此不涉及动态内存分配,即使与原始指针相比,差异也可能很大。

关于c++ - `std::optional` 比 `std::shared_ptr` 和 `std::unique_ptr` 有什么优势?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42929808/

49 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com